使用java连接到SQL_database

时间:2017-05-04 13:46:47

标签: java mysql jdbc

我希望在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();
            }
        }
    }
}
}

2 个答案:

答案 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();
}