繁体   English   中英

MySQL 和 JApplet(是的另一个)

[英]MySQL and JApplet (yes another one)

在开始之前,我想提一下,我已经对此进行了彻底的研究,但尚未找到对我有用的解决方案(研究了 2-3 天)。

当前使用:WAMPServer 2.1 版(禁用 Apache 服务)
Eclipse-jee x64
javac 1.6.0_22
Windows 7 x64

小程序、网页和数据库都驻留在我的本地计算机上。

首先,我的小程序在 Eclipse IDE 中没有问题,但是当我尝试将其作为小程序运行时,我不断收到以下错误。ZFC35FDC70D5FC69D269883A822C7A5EZ 使用以下脚本:

<applet code="GUI.class"
    name="Some name goes here"
    archive="APTracker.jar"
    width="1000" height="700">
    Your browser is not Java enabled.
</applet>
  1. 我已经使用 Eclipse IDE 导出了我的 class 文件,其中已将清单包含到 appletJar.Z68940548444434ADDACD
  2. Eclipse 导出的 Jar 不包含 mysql-connector 库
  3. After assembling my class files I manually extracted the com and org files from the mysql-connector jar and input them into my appletJar.jar
  4. 在此之后,我使用在 6 个月内到期的密钥签署了我的小程序 jar(并确认它已签名)。

在这些步骤之后,我仍然收到如下所示的错误消息。

我尝试用 127.0.0.1 替换 localhost ,但没有成功。 我还尝试将 mysql-connector.jar 放置在 jre、jdk 和根 class 文件中,这些文件显示没有任何变化。

    private final String DRIVER = "com.mysql.jdbc.Driver";
    private final String DATABASE_URL = "jdbc:mysql://localhost:3306/javadb";
    private final String USERNAME = "xxxxxx";
    private final String PASSWORD = "xxxxxx";

    private Connection connection = null;
    private PreparedStatement selectAllAirports = null;

    private ResultSet resultSet;
    private ResultSetMetaData metaData;

    /* Establish PreparedStatements */
    public ResultSetTableModel()
    {
        try
        {   
            //establish connection to database
            connection = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);

            //load driver class
            Class.forName( DRIVER );

            //create prepared statements
            selectAllAirports = connection.prepareStatement( "SELECT asciiname, latitude, longitude, elevation, timezone, country_code FROM geoname;" );
        }
        catch ( SQLException sqlException )
        {
            sqlException.printStackTrace();
            //System.exit(1);
        }
        catch ( ClassNotFoundException classNotFound )
        {
            System.out.println("ClassNotFoundException triggered.");
            classNotFound.printStackTrace();
        }
    }

这是我收到的错误消息:

C:\Users\Mr.\Desktop\Applet>appletviewer applet.html
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/javadb
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at ResultSetTableModel.(ResultSetTableModel.java:38)
        at GUI.(GUI.java:20)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at sun.applet.AppletPanel.createApplet(AppletPanel.java:785)
        at sun.applet.AppletPanel.runLoader(AppletPanel.java:714)
        at sun.applet.AppletPanel.run(AppletPanel.java:368)
        at java.lang.Thread.run(Thread.java:662)
java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
        at java.util.Vector.elementAt(Vector.java:427)
        at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
        at GUI.init(GUI.java:60)
        at sun.applet.AppletPanel.run(AppletPanel.java:424)
        at java.lang.Thread.run(Thread.java:662)

请注意,如果支持服务加载器方法,则最近的 JDBC 驱动程序不需要Class.forName()调用。

当前的 Connector/J 版本确实支持这一点,但是通过仅包含 JDBC 驱动程序的orgcom目录,您“破坏”了它:服务加载器机制取决于META-INF目录下的文件。

因此,通过您的设置,您确实需要Class.forName()调用。 但是在您的代码中,该代码是尝试获取连接之后,这没有任何好处。

所以做其中之一:

  • 将 JDBC 驱动程序(在META-INF/services下)中的相关服务文件添加到您的 jar 文件中(并去掉不必要的Class.forName()调用)
  • Class.forName()调用放在DriverManager.getConnection()调用之前

Rather than trying to manually put the MySQL class files into your APTracker.jar, why not just include the MySQL jar on the applet's classpath?

我怀疑 MySQL jar 文件的 META-INF 目录中存在您需要的东西 - ServiceLoader 配置文件或类似文件。

需要考虑的事情是:

  1. 您的机器中是否有mysql-connector-java-5.1.10.jar或任何相关连接器? 如果没有,请在谷歌中询问?
  2. 如果有,请将连接器粘贴到C:\Program Files\Java\jdk...\jre\lib\ext目录。
  3. 将存档上的小程序标签编辑为archive = APTracker.jar, mysql-connector-java-5.1.10.jar
  4. 再次将mysql-connector-java-5.1.10.jar到 .html、.class 等文件所在的位置。

我猜 MySQL JDBC jar 不见了。

您可以从以下网址下载 jar: http://www.mysql.com/downloads/connector/j/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM