У меня проблемы с новичком при подключении к MySQL с использованием Java на 64-битной платформе Vista. Я читал информацию в Интернете от других людей с похожей проблемой, но безуспешно. Вероятно, это связано с отсутствием понимания с моей стороны. Я вижу, что порт 3306 прослушивает, используя netstat -an. Я отключил брандмауэр MS и установил webroot, так как мой брандмауэр разрешен и MySQL. Я добавил путь к файлу jar драйвера JDBC в опции -cp. Отладка, кажется, указывает на то, что драйвер не зарегистрирован, но я могу выполнять все функции mysql в базе данных из командной строки.
Я видел следующее исключение:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Это мой вывод:
C:\Users\Jerry>java -cp c:\Users\jerry;c:\ProgramFiles(86)\ConnectorJ\mysql-connector-java-5.1.11-bin dbaccess
FOO: jdbc:mysql://127.0.0.1:3306/access03tstroot
Cannot connect to database server
SQLEXCEPTION: com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at dbaccess.mysqlConnection(dbaccess.java:77)
at dbaccess.main(dbaccess.java:59)
Я распечатываю сообщения с отправляемым сообщением и устанавливаю точки останова в DriverManager.getConnection. Я думаю, что есть фрагмент кода, который проверяет наличие зарегистрированного драйвера.
Сбой кода во время isDriverAllowed (aDriver.driver, callCL)
Насколько я понимаю, вызов Class.forName зарегистрирует новый драйвер при его обнаружении.
Цикл делает два прохода, сначала ищет драйвер ODBC, затем com.mysql.jdbc.driver.
CallerCL = sun.misc.Launcher$AppClassLoader@1054f93
URL-адрес: jdbc: mysql: / loacalhost: 3306 / access03tst
for(DriverInfo aDriver : registeredDrivers) {
// If the caller does not have permission to load the driver then
// skip it.
if(isDriverAllowed(aDriver.driver, callerCL)) {
try {
println(" trying " + aDriver.driver.getClass().getName());
Connection con = aDriver.driver.connect(url, info);
if (con != null) {
// Success!
println("getConnection returning " + aDriver.driver.getClass().getName());
return (con);
}
} catch (SQLException ex) {
if (reason == null) {
reason = ex;
}
}
} else {
println(" skipping: " + aDriver.getClass().getName());
}
}
Моя команда компиляции:
javac -d . -sourcepath . -cp c:\Users\Jerry;c:\ProgramFiles(86)\ConnectorJ\mysql-connector-java-5.1.11-bin c:\Users\Jerry\dbaccess.java
Моя команда выполнения:
java -cp c:\Users\jerry;c:\ProgramFiles(86)\ConnectorJ\mysql-connector-java-5.1.11-bin dbaccess
Мой код следующий:
package dbaccess;
import java.sql.*;
import java.lang.*;
public class dbaccess
{
// Public static indicates that this is a class variable not an instance
// variable. It is part of the class as a whole.
public static Connection conn = null;
public boolean success;
public static void main (String[] args)
{
init();
mysqlConnection();
getList catList = new getList();
boolean status = catList.success;
}
public static void mysqlConnection()
{
try
{
String dbName = "access03tst";
String userName = "";
String password = "";
String url = "jdbc:mysql://localhost:3306/";
String driver = "com.mysql.jdbc.driver";
String foo = url+dbName+userName+password;
System.out.println("FOO: " + foo);
//Register the JDBC driver for MySQL.
Class.forName("com.mysql.jdbc.Driver"); //.newInstance ();
System.out.println("Surprise we got here ");
conn = DriverManager.getConnection(url+dbName+userName+password);
System.out.println ("Database connection established");
System.out.println("URL: " + url);
System.out.println("Connection: " + conn);
}
catch (Exception e)
{
System.err.println ("Cannot connect to database server");
}
finally
{
if (conn != null)
{
try
{
conn.close ();
System.out.println ("Database connection terminated");
}
catch (Exception e) { /* ignore close errors */ }
}
} // end finally
}
public static void init()
{
//
// Public static indicates that this is a class variable not an instance
// variable. It is part of the class as a whole.
conn = null;
boolean success = false;
boolean CatRequest = false;
}
}