gpt4 book ai didi

java - 使用 Java Applet 访问本地客户端数据库

转载 作者:行者123 更新时间:2023-11-29 08:59:59 25 4
gpt4 key购买 nike

我正在尝试构建一个连接到客户端数据库并执行一些查询的 Java Applet。

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>

最佳答案

如果您尝试从小程序创建到本地主机的 jdbc 连接:只要连接到本地数据库与小程序访问远程数据库相同(由于安全限制),您应该使用通用规则:

http://www.oracle.com/technetwork/java/dba-140353.html#applet

至于数据库主机解析 - 如果它不会通过“localhost”或“127.0.0.1”访问,那么您可能应该找到另一种方法来解析本地主机连接路径。

如果您尝试访问文件进行读取而不是使用 jdbc,您也应该授予此操作的权限:

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

关于java - 使用 Java Applet 访问本地客户端数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18050260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com