Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết nối Java với cơ sở dữ liệu MySQL

Dưới đây là giải thích từng bước về cách cài đặt MySQL và JDBC cũng như cách sử dụng nó:

  1. Tải xuống và cài đặt máy chủ MySQL . Chỉ cần làm theo cách thông thường. Hãy nhớ số cổng bất cứ khi nào bạn thay đổi nó. Theo mặc định, nó là 3306 .

  2. Tải xuống trình điều khiển JDBC và đưa vào classpath , giải nén tệp ZIP và đặt tệp JAR chứa trong classpath. Trình điều khiển JDBC dành riêng cho nhà cung cấp là một triển khai cụ thể của API JDBC ( hướng dẫn tại đây ).

    Nếu bạn đang sử dụng IDE như Eclipse hoặc Netbeans, thì bạn có thể thêm nó vào classpath bằng cách thêm tệp JAR dưới dạng Thư viện đến Đường dẫn xây dựng trong tài sản của dự án.

    Nếu bạn đang làm điều đó "đơn giản" trong bảng điều khiển lệnh, thì bạn cần chỉ định đường dẫn đến tệp JAR trong -cp hoặc -classpath đối số khi thực thi ứng dụng Java của bạn.

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    . chỉ ở đó để thêm hiện tại thư mục tới classpath để nó có thể định vị com.example.YourClass; là dấu phân cách classpath giống như trong Windows. Trong Unix và các bản sao : nên được sử dụng.

  3. Tạo cơ sở dữ liệu trong MySQL . Hãy tạo cơ sở dữ liệu javabase . Tất nhiên, bạn muốn Thống trị Thế giới, vì vậy, hãy sử dụng UTF-8.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Tạo người dùng cho Java và cấp nó truy cập . Đơn giản vì sử dụng root là một thực hành không tốt.

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    Có, java là tên người dùng và password là mật khẩu ở đây.

  5. Xác định URL JDBC . Để kết nối cơ sở dữ liệu MySQL bằng Java, bạn cần có URL JDBC theo cú pháp sau:

    jdbc:mysql://hostname:port/databasename
    • hostname :Tên máy chủ nơi máy chủ MySQL được cài đặt. Nếu nó được cài đặt trên cùng một máy mà bạn chạy mã Java, thì bạn chỉ có thể sử dụng localhost . Nó cũng có thể là một địa chỉ IP như 127.0.0.1 . Nếu bạn gặp sự cố kết nối và sử dụng 127.0.0.1 thay vì localhost đã giải quyết nó, thì bạn đã gặp sự cố trong cấu hình mạng / DNS / máy chủ của mình.

    • port :Cổng TCP / IP nơi máy chủ MySQL lắng nghe. Đây là theo mặc định 3306 .

    • databasename :Tên của cơ sở dữ liệu bạn muốn kết nối. Đó là javabase .

    Vì vậy, URL cuối cùng sẽ giống như sau:

    jdbc:mysql://localhost:3306/javabase
  6. Kiểm tra kết nối sang MySQL bằng Java . Tạo một lớp Java đơn giản với main() phương pháp để kiểm tra kết nối.

    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "password";
    
    System.out.println("Connecting database...");
    
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
    }
    

    Nếu bạn nhận được SQLException: No suitable driver , thì điều đó có nghĩa là trình điều khiển JDBC hoàn toàn không được tự động tải hoặc URL JDBC bị sai (tức là nó không được nhận dạng bởi bất kỳ trình điều khiển đã tải nào). Thông thường, trình điều khiển JDBC 4.0 sẽ được tự động tải khi bạn chỉ thả nó vào đường dẫn thời gian chạy. Để loại trừ cái này và cái khác, bạn luôn có thể tải nó theo cách thủ công như bên dưới:

    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    

    Lưu ý rằng newInstance() cuộc gọi không cần thiết ở đây. Nó chỉ để sửa lỗi org.gjt.mm.mysql.Driver cũ và nhiều lỗi . Giải thích tại đây . Nếu dòng này ném ClassNotFoundException , thì tệp JAR chứa lớp trình điều khiển JDBC chỉ đơn giản là không được đặt trong classpath.

    Lưu ý rằng bạn không cần phải tải trình điều khiển mọi lúc trước đây Đang kết nối. Chỉ một lần trong khi khởi động ứng dụng là đủ.

    Nếu bạn nhận được SQLException: Connection refused hoặc Connection timed out hoặc một MySQL cụ thể CommunicationsException: Communications link failure , thì điều đó có nghĩa là DB hoàn toàn không thể truy cập được. Điều này có thể do một hoặc nhiều nguyên nhân sau:

    1. Địa chỉ IP hoặc tên máy chủ trong URL JDBC không chính xác.
    2. Tên máy chủ trong URL JDBC không được máy chủ DNS cục bộ nhận dạng.
    3. Số cổng bị thiếu hoặc sai trong URL JDBC.
    4. Máy chủ DB không hoạt động.
    5. Máy chủ DB không chấp nhận kết nối TCP / IP.
    6. Máy chủ DB đã hết kết nối.
    7. Một cái gì đó giữa Java và DB đang chặn các kết nối, ví dụ:tường lửa hoặc proxy.

    Để giải quyết vấn đề này hay vấn đề khác, hãy làm theo lời khuyên sau:

    1. Xác minh và kiểm tra chúng bằng ping .
    2. Làm mới DNS hoặc sử dụng địa chỉ IP trong URL JDBC.
    3. Xác minh nó dựa trên my.cnf của MySQL DB.
    4. Khởi động DB.
    5. Xác minh xem mysqld có được khởi động mà không có tùy chọn --skip-networking option hay không .
    6. Khởi động lại DB và sửa mã của bạn tương ứng để nó đóng các kết nối trong finally .
    7. Tắt tường lửa và / hoặc định cấu hình tường lửa / proxy để cho phép / chuyển tiếp cổng.

    Lưu ý rằng đóng Connection cực kỳ quan trọng. Nếu bạn không đóng các kết nối và tiếp tục nhận được nhiều kết nối trong thời gian ngắn, thì cơ sở dữ liệu có thể hết kết nối và ứng dụng của bạn có thể bị hỏng. Luôn có được Connection trong try-with-resources tuyên bố . Hoặc nếu bạn chưa sử dụng Java 7, hãy đóng nó một cách rõ ràng trong finally của một try-finally khối. Kết thúc trong finally chỉ là để đảm bảo rằng nó cũng được đóng lại trong trường hợp có ngoại lệ. Điều này cũng áp dụng cho Statement , PreparedStatementResultSet .

Đó là nó cho đến nay các mối quan tâm kết nối. Bạn có thể tìm thấy tại đây hướng dẫn nâng cao hơn về cách tải và lưu trữ các đối tượng mô hình Java có giá trị đầy đủ trong cơ sở dữ liệu với sự trợ giúp của lớp DAO cơ bản.

Sử dụng một mẫu Singleton cho kết nối DB là một cách tiếp cận không tốt. Xem trong số các câu hỏi khác: http://stackoverflow.com/q/9428573/ . Đây là một sai lầm số 1 dành cho người mới bắt đầu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy cập cơ sở dữ liệu từ xa mysql từ dòng lệnh

  2. Khi nào đóng con trỏ bằng MySQLdb

  3. Nodejs bày tỏ và hứa sẽ không làm những gì tôi mong đợi

  4. Chèn SQL trong ADOdb và bảo mật trang web chung

  5. Làm thế nào để tham gia hai bảng mysql?