我希望在MySQL和我的Java应用程序之间建立连接。 当我运行程序时,我收到此错误:我的日志信息是真的。这是一个项目,我应该能够在本地数据库中添加,插入,删除和更新客户信息。
java.lang.ClassNotFoundException: com/mysql/jdbc/Driver.class
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at sample.Database.Connection.getConnection(Connection.java:26)
at sample.Presentation.Controller.<init>(Controller.java:19)
at sample.Presentation.Main.start(Main.java:13)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
代码
public class Controller {
public Controller(Stage primaryStage) {
ButtonPane buttonPane = new ButtonPane();
AddPane addPane = new AddPane();
VBox vBoxStart = new VBox();
Connection connection = new Connection();
try {
connection = connection.getConnection();
}catch (Exception e){
System.out.println("No connection");
}
Querys querys = new Querys();
HBox hBoxOption = new HBox(buttonPane.ButtonPane(),addPane.getPane());// Menu and add/update/delete
HBox hBoxView = new HBox(); // Calender/tableView
vBoxStart.getChildren().addAll(hBoxOption,hBoxView);
Scene scene = new Scene(vBoxStart,1000,1000);
primaryStage.setScene(scene);
primaryStage.show();
Connection finalConnection = connection;
addPane.getButtonAddCustomer().setOnAction(event ->{
querys.viewTable(finalConnection,"customer");
} );
}
}
public class Connection {
String userName = "root";
String password = "rasmus12";
String dbms = "mysql";
String serverName = "localhost";
String portNumber = "3306";
public Connection getConnection() {
Connection conn = null;
try {
Class.forName("com/mysql/jdbc/Driver.class");
conn = (Connection) DriverManager.getConnection(
"jdbc:" + this.dbms + "://" +
this.serverName +
":" + this.portNumber + "/",
this.userName,this.password);
System.out.println("Connected to database");
} catch (SQLException e) {
System.out.println("SQL Exception in connection");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
}
public class Querys {
public void viewTable(Connection con, String dbName) {
Statement stmt = null;
String query = "select * " +
"from " + dbName;
try {
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
int id = rs.getInt("person_id");
String firstName = rs.getString("person_first_name");
String lastName = rs.getString("person_last_name");
String adresse = rs.getString("person_adresse");
String zip = rs.getString("person_zip");
String city = rs.getString("person_city");
int mobilePhone = rs.getInt("person_mobile_phone");
int phone = rs.getInt("person_phone");
int driverLicenceNumber = rs.getInt("person_driver_licence_number");
String driverSinceDate = rs.getString("person_driver_since_date");
String registrationNumber = rs.getString("person_registration_number");
int orderId = rs.getInt("order_id");
System.out.println(id + "\t" + firstName +
"\t" + lastName + "\t" + adresse +
"\t" + zip +
"\t" + city +
"\t" + mobilePhone +
"\t" + phone +
"\t" + driverLicenceNumber +
"\t" + driverSinceDate +
"\t" + registrationNumber+
"\t" + orderId);
}
} catch (SQLException e) {
System.out.println("SQL Exception");
} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
答案 0 :(得分:2)
你必须使用驱动程序不正确:
Class.forName("com.mysql.jdbc.Driver");
而不是:
Class.forName("com/mysql/jdbc/Driver.class");
但是从Java 6开始不再需要调用Class.forName(),你可以阅读this,并且在他的回答中提到@duffymo,确保你的类路径中存在驱动程序jar
答案 1 :(得分:1)
ClassNotFoundException
表示类加载器找不到MySQL JDBC驱动程序类。
您需要下载MySQL Connector JAR并将其添加到CLASSPATH。
我建议使用MySQL JDBC tutorial。
这是一个Java技巧:不要在catch块中写消息:
catch (SQLException e) {
System.out.println("SQL Exception");
}
打印或记录整个堆栈跟踪。这是您的消息提供的更多信息。
catch (SQLException e) {
e.printStackTrace();
}