MySQL и JApplet (да еще один) - PullRequest
1 голос
/ 14 июня 2011

Прежде чем я начну, я хотел бы упомянуть, что я тщательно исследовал это и еще не нашел решения, которое сработало бы для меня (хорошие 2-3 дня исследования).

В настоящее время используется: WAMPServer версии 2.1 (служба Apache отключена)
Eclipse-jee x64
javac 1.6.0_22
Windows 7 x64

Апплет, веб-страница и база данныхвсе проживают на моем локальном компьютере.

Прежде всего, мой апплет работает без проблем в Eclipse IDE, однако я постоянно получаю следующую ошибку при попытке запустить его как applet.html со следующим скриптом:

<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, которая включила манифест в appletJar.jar.
  2. Jar, экспортированный Eclipse, НЕ содержит библиотеку mysql-connector
  3. После сборки моегофайлы классов Я вручную извлек файлы com и org из jar-файла mysql-connector и ввел их в свой appletJar.jar
  4. После этого я подписал свой jar-файл апплета (и подтвердил, что он подписан) с помощьюключ, срок действия которого истекает через 6 месяцев.

После этих шагов я все еще получаю сообщение об ошибке, показанное ниже.

Я попытался заменить localhost на 127.0.0.1, который не работал.Я также попытался поместить mysql-connector.jar в файлы классов jre, jdk и root, которые не показали изменений.

    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)

Ответы [ 4 ]

3 голосов
/ 14 июня 2011

Обратите внимание, что последние драйверы JDBC не нуждаются в вызове Class.forName() , если поддерживается метод загрузки службы.

Текущая версия Connector / J делает поддержите это, , но , включив только каталоги org и com драйвера JDBC, который вы его «сломали»: механизм загрузчика служб зависит от файлов в каталоге META-INF.

Таким образом, при вашей настройке действительно потребуется вызов Class.forName().Но в вашем коде этот код - после попытки установить соединение, которое не принесет пользы.

Так что сделайте одно из них:

  • Добавьте соответствующие служебные файлы из драйвера JDBC (в разделе META-INF/services) в файл JAR (и избавьтесь от ненужного вызова Class.forName()) или
  • Поместите вызов Class.forName() перед * 1031.* вызов DriverManager.getConnection().
1 голос
/ 19 августа 2011

Что нужно учитывать:

  1. Есть ли у вас mysql-connector-java-5.1.10.jar или какой-либо связанный разъем на вашей машине? Если нет, спросите в Google?
  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 и т. П.
1 голос
/ 14 июня 2011

Вместо того, чтобы пытаться вручную помещать файлы классов MySQL в ваш APTracker.jar, почему бы просто не включить jSQL-файл MySQL в путь к классу апплета?

Я подозреваю, что в каталоге META-INF файла jar MySQL есть что-то, что вам нужно - файл конфигурации ServiceLoader или что-то подобное.

0 голосов
/ 14 июня 2011

Полагаю, JAR-файл MySQL JDBC отсутствует.

вы можете загрузить этот jar-файл из: http://www.mysql.com/downloads/connector/j/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...