在我开始之前,我想提一下,我已经彻底研究过这个问题,并且尚未找到一个对我有用的解决方案(2-3天的研究)。
目前正在使用:
WAMPServer版本2.1(禁用Apache服务)
Eclipse-jee x64
javac 1.6.0_22
Windows 7 x64
小程序,网页和数据库都驻留在我的本地计算机上。
首先,我的applet在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>
com
和org
文件,
将它们输入我的appletJar.jar 完成这些步骤后,我仍然会收到如下所示的错误消息。
我尝试用127.0.0.1替换localhost,但是没有用。我也尝试过放置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)
答案 0 :(得分:3)
请注意,最近的JDBC驱动程序不需要Class.forName()
调用,如果支持服务加载程序方法。
当前的Connector / J版本 支持但,只包含JDBC驱动程序的org
和com
目录“打破了“它:服务加载器机制依赖于META-INF
目录下的文件。
因此,使用您的设置,确实需要Class.forName()
电话。但是在你的代码中代码是之后尝试获取连接,这将无济于事。
其中一个:
META-INF/services
下)添加到您的jar文件中(并删除不必要的Class.forName()
调用)或Class.forName()
电话之前拨打DriverManager.getConnection()
电话。答案 1 :(得分:1)
为什么不在MySQL applass的类路径中包含MySQL jar,而不是试图手动将MySQL类文件放入APTracker.jar中?
我怀疑你需要的MySQL jar文件的META-INF目录中有一些东西 - 一个ServiceLoader配置文件或者其他一些文件。
答案 2 :(得分:1)
需要考虑的事项是:
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等文件所在的位置。答案 3 :(得分:0)
我猜想缺少MySQL JDBC jar。
下载该jar