[英]Access a local client database using Java Applet
我正在嘗試構建一個Java Applet,該Java Applet連接到客戶端的數據庫並執行一些查詢。
該小程序需要使用JDBC ...,因此我實現了一個非常簡單的JDBC連接,該連接與位於C:/驅動器上的數據庫文件有關。
在對應用程序進行簽名(不對應用程序進行簽名,沒有很多安全警報和牆壁)之后,我陷入了此錯誤:“此JVM實例中不允許對Applet ID 1進行Liveconnect調用”
有誰知道通過網絡瀏覽器從客戶端數據庫中流式傳輸和獲取結果的更簡單方法? 還是有人知道為什么會這樣?
我的代碼:AppletStart.java(客戶端-Applet)
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(客戶端-Applet):
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>
如果您嘗試創建從applet到localhost的jdbc連接:只要與本地數據庫的連接與applet對遠程的訪問相同(由於安全性限制),則應使用通用規則:
http://www.oracle.com/technetwork/java/dba-140353.html#applet
至於數據庫主機解析-如果它不能通過'localhost'或'127.0.0.1'訪問,那么您可能應該找到另一種解析本地主機連接路徑的方法。
如果您要訪問文件以進行讀取,而不是與jdbc一起使用,則還應該授予該操作權限:
http://www.coderanch.com/how-to/java/HowCanAnAppletReadFilesOnTheLocalFileSystem
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.