2012-11-23 2 views
1
//JDBC using Applet 
/* 
<applet code = JDBC1 height = 170 width = 350 > 
</applet> 
*/ 

import javax.swing.*; //JApplet,JLabel,JButton 

import java.applet.*; //Applet 
import java.awt.*; //Layout 

import java.awt.event.*; //Events 

import java.sql.*; //JDBC 

public class JDBC1 extends Applet implements Runnable,ActionListener 
{ 
JFrame frame ; 
JPanel panel1; 
JLabel lblNo,lblName,lblBdate ; 
JTextField txtNo,txtName,txtBdate; 
JButton btn; 

Statement st1; 
Connection cn; 
ResultSet rs; 

    public JDBC1() 
    { 
     try 
     { 
      panel1 = new JPanel(); 
      panel1.setLayout(new GridLayout(0,2)); 

      lblNo = new JLabel ("Roll No : "); 
      panel1.add(lblNo); 

      txtNo = new JTextField(15); 
      panel1.add(txtNo); 

      lblName = new JLabel ("Name : "); 
      panel1.add(lblName); 

      txtName = new JTextField(15); 
      panel1.add(txtName); 

      lblBdate = new JLabel ("Birth Date : "); 
      panel1.add(lblBdate); 

      txtBdate = new JTextField(15); 
      panel1.add(txtBdate); //Add textarea to the panel. 

      add(panel1); //Add panel to the aaplet. 

      btn = new JButton ("First"); 
      add(btn); //Add button to the applet. 
      btn.addActionListener(this); 

      btn = new JButton ("Next"); 
      add(btn); 
      btn.addActionListener(this); 

      btn = new JButton ("Last"); 
      add(btn); 
      btn.addActionListener(this); 

      btn = new JButton ("Prev"); 
      add(btn); 
      btn.addActionListener(this); 

      btn = new JButton ("Save"); 
      add(btn); 
      btn.addActionListener(this); 

      btn = new JButton ("Reset"); 
      add(btn); 
      btn.addActionListener(this); 

      btn = new JButton ("Delete"); 
      add(btn); 
      btn.addActionListener(this); 

      btn = new JButton ("Update"); 
      add(btn); 
      btn.addActionListener(this); 

      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //Load the JDBC-ODBC bridge driver 
      cn = DriverManager.getConnection("jdbc:odbc:STUDENT_MYDSN"); // conection to databse 

      st1 = cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 

      String query = "select * from Student"; 
      rs = st1.executeQuery(query); 

     } 

     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public void init() 
    { 
     try 
     { 
      Thread th = new Thread (this); 
      th.start(); 
     } 
     catch(Exception ex) 
     { 
      System.out.println(ex.toString()); 
     } 
    } 


    public void run() 
    { 
     try 
     { 

      while(true) 
      { 
       JDBC1 my = new JDBC1(); 
       repaint(); 
       Thread.sleep(1000); 
      } 
     } 
     catch(Exception ex) 
     { 
      System.out.println(ex.toString()); 
     } 
    } 

    public void paint (Graphics g) 
    { 
     super.paint(g); 
     java.util.Date dt = new java.util.Date(); 
     String myDate = dt+""; 
     g.drawString(myDate,100,150); 
    } 

    void getRecord() 
    { 
     try 
     { 
      txtNo.setText((String) rs.getObject(1)); 
     } 

     catch (Exception e) 
     { 
      System.out.println(e.toString()); 
     } 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     try 
     { 
      String name = ((JButton) e.getSource()).getText(); 

      if (name == "First") 
      { 

       System.out.println("First"); 
      } 

      if (name == "Prev") 
      { 
       System.out.println("Prev"); 
      } 

      if (name == "Next") 
      { 
       System.out.println("Next"); 
      } 

      if (name == "Last") 
      { 
       System.out.println("First"); 
      } 

      if (name == "Save") 
      { 
       System.out.println("First"); 
      } 

      if (name == "Delete") 
      { 
       System.out.println("First"); 
      } 

      if (name == "Update") 
      { 
       System.out.println("First"); 
      } 

      if (name == "Reset") 
      { 
       System.out.println("First"); 
      } 
     } 

     catch (Exception ex) 
     { 
      System.out.println(ex.toString()); 
      ex.printStackTrace(); 
     } 
    } 

} 

Используя этот апплет с JDBC, я получаю ниже ошибкиапплета с JDBC - java.security.AccessControlException: Отказано в доступе

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "file.encoding" 
      at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366) 
      at java.security.AccessController.checkPermission(AccessController.java:560) 
      at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
      at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1302) 
      at java.lang.System.getProperty(System.java:706) 
      at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:142) 
      at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) 
      at java.sql.DriverManager.getConnection(DriverManager.java:579) 
      at java.sql.DriverManager.getConnection(DriverManager.java:243) 
      at JDBC1.<init>(JDBC1.java:87) 
      at JDBC1.run(JDBC1.java:123) 
      at java.lang.Thread.run(Thread.java:722) 
+0

мне кажется, его просто операция отрицания записи файла. вы проверили chmod? – toxicate20

+0

Я не знаю, chmod, как использовать chmod? –

ответ

1

Вы не сможете запустить JDBC в апплет без предпринимая шаги для предоставления апплетам соответствующих разрешений. Тема подробно освещена this tutorial от Oracle.

+0

нормально ... меня получить несколько руководства через этот учебник теперь он работает для меня .. У меня есть добавить следующий файл: «JDBC1.TXT» - (содержание файла) \t грант { \t \t \t разрешение java.util.PropertyPermission \t \t "file.encoding", "read"; \t}; и запустите мой апплет, используя следующую команду: appletviewer -J-Djava.security.policy = JDBC1.txt JDBC1.java –

0

Вы не сможете получить доступ к драйверам ODBC из (ненадежного) апплета, так же, как вы не сможете прочитать локальную файловую систему.

Есть «чистые Java» JDBC-драйверы, которым нужны только разрешения сокетов. Это будет работать, если сервер базы данных доступен по одному и тому же происхождению («Same Origin Policy») в качестве веб-сервера, который доставил апплет (и в сети нет никаких помех).

Однако, вероятно, это плохая идея предоставить базу данных по сети конечным пользователям. Обычно вы можете открыть безопасный интерфейс через веб-сервер. Кроме того, если апплет загружен по сети, маловероятно, что вы захотите получить локально настроенную базу данных.

(Код в этом вопросе кажется экстраординарным долго по сравнению с минимальной полной программой, выражающей этой проблемой, но я мог бы продолжаться вечно критикующим код.)

Смежные вопросы