[英]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>
com
and org
files from the mysql-connector jar and input them into my appletJar.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 驱动程序的org
和com
目录,您“破坏”了它:服务加载器机制取决于META-INF
目录下的文件。
因此,通过您的设置,您确实需要Class.forName()
调用。 但是在您的代码中,该代码是在尝试获取连接之后,这没有任何好处。
所以做其中之一:
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 配置文件或类似文件。
需要考虑的事情是:
mysql-connector-java-5.1.10.jar
或任何相关连接器? 如果没有,请在谷歌中询问?C:\Program Files\Java\jdk...\jre\lib\ext
目录。archive = APTracker.jar, mysql-connector-java-5.1.10.jar
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.