2013-08-05 2 views
2

클라이언트 측의 데이터베이스에 연결하고 일부 쿼리를 실행하는 Java 애플릿을 작성하려고합니다.Java 애플릿을 사용하여 로컬 클라이언트 데이터베이스에 액세스

애플릿은 JDBC를 사용해야하기 때문에 C :/드라이브에있는 데이터베이스 파일에 매우 간단한 JDBC 연결을 구현했습니다.

응용 프로그램에 서명 한 후 (응용 프로그램을 로그인하지 않고, 많은 보안 경고 및 벽) 나는이 오류에 붙어있어 :

사람을합니까 "LiveConnect를 호출 애플릿 ID 1이 JVM 인스턴스에서 허용되지 않습니다" 웹 브라우저를 통해 클라이언트가 위치한 데이터베이스에서 스트리밍하고 결과를 얻는 간단한 방법을 알고 있습니까? 왜 이런 일이 일어나는 지 아는 사람이 있습니까?

내 코드 : AppletStart.java (클라이언트 측 - 애플릿)

public class AppletStart extends Applet { 

    private static final long serialVersionUID = -2032951133100677643L; 

    public void queryDatabase(final String databaseFilePath, final String databaseQuery) { 

     AccessController.doPrivileged(new PrivilegedAction<Object>() { 
      public Object run() { 
       JDBCBean jdbcTest = new JDBCBean(); 
       jdbcTest.setDatabaseFilePath(databaseFilePath); 
       jdbcTest.setDatabaseQuery(databaseQuery); 

       try { 
        buildResult(jdbcTest.queryDatabase()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 
     }); 
    } 

    public void buildResult(ResultSet resultSet) throws SQLException { 
     ResultSetMetaData metaData = resultSet.getMetaData(); 
     int columns = metaData.getColumnCount(); 
     String text = ""; 

     while (resultSet.next()) { 
      for (int i = 1; i <= columns; ++i) { 
       text += "" + metaData.getColumnName(i) + ":\t"; 
       text += resultSet.getString(i); 
       text += "\n"; 
      } 
      text += "\n"; 
     } 

     alert(text); 
    } 

    public void alert(String text) { 
     try { 
      JSObject window = JSObject.getWindow(this); 
      window.call("showAlert", new Object[] { text }); 
     } catch (JSException jse) { 
      jse.printStackTrace(); 
     } 
    } 

} 

JDBCBean.java (클라이언트 측 - 애플릿) :

public class JDBCBean { 

    private static String JDBC_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver"; 
    private static String CONN_STRING_FRAGMENT = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="; 

    private Connection connection; 
    private Statement statement; 

    private String databaseFilePath; 
    private String databaseQuery; 

    public void setDatabaseFilePath(String databaseFilePath) { 
     this.databaseFilePath = databaseFilePath; 
    } 

    public void setDatabaseQuery(String databaseQuery) { 
     this.databaseQuery = databaseQuery; 
    } 

    public ResultSet queryDatabase() { 
     try { 

      Class.forName(JDBC_DRIVER).newInstance(); 
      String connectionString = CONN_STRING_FRAGMENT + databaseFilePath; 
      connection = DriverManager.getConnection(connectionString, "", ""); 

      buildStatement(); 
      return executeQuery(); 

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

     return null; 
    } 

    public void buildStatement() throws SQLException { 
     statement = connection.createStatement(); 
    } 

    public ResultSet executeQuery() throws SQLException { 

     boolean foundResults = statement.execute(databaseQuery); 

     if (foundResults) { 
      ResultSet set = statement.getResultSet(); 
      if (set != null) 
       return set; 
     } 

     connection.close(); 
     return null; 
    } 

} 

HTML (서버 측) :

<body onload="queryDatabase()"> 
    <script> 

     var databaseFilePath = "C:/test_db.mde"; 
     var databaseQuery = "SELECT * FROM test_table"; 

     function showAlert(text) { 
      alert(text); 
     } 

     function queryDatabase() { 
      document.dbApplet.queryDatabase(databaseFilePath, databaseQuery); 
     } 

    </script> 
    <applet id="dbApplet" code="br.com.applet.AppletStart" archive="../resources/applet/dbapplet.jar" style="width: 1px; height: 1px; float: left;" mayscript="mayscript"></applet> 
</body> 

답변

0

applet에서 localhost에 jdbc 연결을 만들려는 경우 : loc 연결까지 알 데이터베이스 (보안상의 제한에 대한) 애플릿에 대한 원격 액세스, 당신은 일반적인 규칙을 사용해야 동일합니다

해결 DB를 호스트로 http://www.oracle.com/technetwork/java/dba-140353.html#applet

를 - 그것은을 통해 액세스하지 않을 경우 '로컬 호스트'또는 '127.0 .0.1 '보다 로컬 호스트 연결 경로를 해결할 다른 방법을 찾아야합니다. 당신이 JDBC와 작업 읽기 및보다 파일에 액세스하려는 경우

, 당신도이 작업에 대한 권한을 부여 shuld :

http://www.coderanch.com/how-to/java/HowCanAnAppletReadFilesOnTheLocalFileSystem

+0

나는 아직도 얻고있다 "애플릿 ID 1 LiveConnect를 호출하지 않습니다 이 JVM 인스턴스에서 허용 "오류입니다. – MBarni

+0

(이 오류를 Google에서 처음 쿼리 한 경우) [1] (https://code.google.com/p/jzebra/issues/detail?id=126), [2] (https :// /bugzilla.mozilla.org/show_bug.cgi?id=146458)? – msangel

+0

예. 나는 항상 Google 것들을 먼저 시도합니다. – MBarni

관련 문제