MySQL ExceptionInInitializerError启动时的Java JDBC

时间:2012-12-17 02:34:52

标签: java database security jdbc applet

我正在创建一个使用SQL数据库的简单applet。
当我在Netbeans上本地使用这个applet它运行正常没有问题,但当我将它部署到Web时,我得到一个奇怪的错误。
我在本地使用Java 1.6,我部署的服务器运行Java 1.6
我使用的是J2BC 5.1.22 这是我得到的错误:

java.lang.ExceptionInInitializerError
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:315)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at FinalProject.DBConnect.<init>(DBConnect.java:29)
at FinalProject.TriviaApplet.init(TriviaApplet.java:61)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
    Caused by: java.security.AccessControlException: access denied
    ("java.util.PropertyPermission" "file.encoding" "read")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at com.mysql.jdbc.StringUtils.<clinit>(StringUtils.java:70)

我用来初始化驱动程序的代码是:

        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(connectionURL, "db", "pw");

有没有人知道为什么会发生这种情况?

要添加,我的Applet会从另一个类中获取所有信息。 ^以上是来自DBConnect类。创建此类的实例,此类执行所有数据库工作。 要求将其作为applet完成。 我已经签署了我的jar和包含JDBC驱动程序的lib jar。

1 个答案:

答案 0 :(得分:0)

这是由于网络安全问题。如何将JDBC驱动程序部署到客户端?你给他们许可吗?事实上,在applet中使用JDBC可以无价值地访问数据库。

  1. 它要求所有客户端必须安装JRE并在CLASSPATH中安装JDBC驱动程序,您可以尝试将JDBC驱动程序与applet打包在同一个JAR中。

  2. 需要通过在每个本地JRE中授予套接字连接来修改策略。

  3. permission java.net.SocketPermission "10.6.1.16:1521", "connect, resolve";

    使这个解决方案几乎没用..