2011-06-14 19 views
1

在我開始之前,我想提一下,我已經徹底研究過這個問題,並且還沒有找到一個適合我的解決方案(一個好的2-3天的研究)。MySQL和JApplet(是的另一個)

目前正在使用: WAMPServer 2.1版(禁用Apache服務)
Eclipse的JEE 64
的javac 1.6.0_22
Windows 7的64位

的小應用程序,網頁和數據庫都駐留在我的本地電腦。

首先我小程序不工作在Eclipse IDE中的問題,但是試圖與下面的腳本運行它applet.html當我不斷recieving以下錯誤:

<applet code="GUI.class" 
    name="Some name goes here" 
    archive="APTracker.jar" 
    width="1000" height="700"> 
    Your browser is not Java enabled. 
</applet> 
  1. 我有使用已將清單包含在appletJar.jar中的Eclipse IDE導出我的類文件。
  2. 通過Eclipse中導出的罐子不包含使用mysql-connector庫
  3. 組裝我的類文件,我手動從提取使用mysql-connector罐子和 輸入他們comorg文件到我的appletJar.jar
  4. 後在此之後,我用一個在6個月內到期的密鑰在我的applet jar上簽名(並確認它已經簽名)。

完成這些步驟後,我仍然收到下面顯示的錯誤消息。

我試過用127.0.0.1替換localhost,但沒有工作。我也嘗試將mysql-connector.jar 放在jre,jdk和根類文件中,這些文件沒有任何變化。

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) 
+0

+1首先實際搜索*和*寫一個很好的解釋你的問題。 – 2011-06-14 14:42:57

+1

您可以嘗試:archive =「APTracker.jar,mysqlDriver.jar」 – Enrique 2011-06-14 15:00:20

回答

3

請注意,如果支持服務加載器方法,最近的JDBC驅動程序不需要Class.forName()調用

當前的連接器/ J版本確實支持的是,通過僅包括JDBC驅動程序的orgcom目錄你「爆發」的:該服務加載機制依賴於文件META-INF目錄下。

所以用你的設置你會確實需要Class.forName()調用。但是在你的代碼中,之後的代碼試圖獲得連接,這不會有什麼好處。

所以,做這些的一個:

  • 從JDBC驅動程序添加相關的服務文件(META-INF/services下),您的jar文件(並擺脫不必要的Class.forName()呼叫)或
  • Class.forName()致電,然後撥打DriverManager.getConnection()
+0

極好的解釋,在第二步之後,我能夠將整個applet壓縮到單個JAR和html文件中。非常感謝你! – 2011-06-14 21:06:18

0

我猜的MySQL JDBC JAR丟失。

您可以下載從罐子:http://www.mysql.com/downloads/connector/j/

+0

我已經在我的jre,jdk和class filepath中包含了連接器 - 所有這些連接器都沒有發生變化。 – 2011-06-14 10:16:48

+0

另外我相當肯定我會得到一個classNotFoundException,如果它是JDBC jar丟失,而不是SQLException。 – 2011-06-14 10:23:28

+0

「我猜MySQL JDBC的jar包丟失了。」似乎這樣,除非MySQL Jar被稱爲'APTracker.jar'(我懷疑)。只有'archive'屬性中提到的Jars中的類纔可用於applet的運行時類路徑(忽略它們在JRE的擴展目錄中的存在 - 這實際上不適用於小程序)。 – 2011-06-14 10:32:41

1

而不是試圖手動將MySQL的類文件到您的APTracker.jar,爲什麼不包括小程序的類路徑MySQL的罐子?

我懷疑你需要的是MySQL jar文件的META-INF目錄中的東西 - 一個ServiceLoader配置文件或者其他的東西。

+0

可能是因爲他的jar文件已簽名,並且您不能在applet中混合簽名和未簽名的類。 – 2011-06-14 14:40:48

+1

是的,但他總是可以簽署MySQL jar文件。 – 2011-06-14 14:47:50

+0

我不知道爲什麼我以前沒有嘗試過。簽署驅動程序jar,包括它,現在像一個魅力的工作,謝謝你 太多了! – 2011-06-14 21:06:40

1

需要考慮的因素有:

  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和類似文件的位置。
+0

**請勿將JAR放入'jre \ lib \ ext'目錄(第2點)!將它們添加到應用程序的運行時類路徑中。按要求。 – 2011-08-19 07:06:05