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ó:
-
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
. -
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
và;
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. -
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;
-
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. -
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ụnglocalhost
. 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ụng127.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 định3306
. -
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
-
-
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ỗiorg.gjt.mm.mysql.Driver
cũ và nhiều lỗi . Giải thích tại đây . Nếu dòng này némClassNotFoundException
, 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ặcConnection 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:- Địa chỉ IP hoặc tên máy chủ trong URL JDBC không chính xác.
- Tên máy chủ trong URL JDBC không được máy chủ DNS cục bộ nhận dạng.
- Số cổng bị thiếu hoặc sai trong URL JDBC.
- Máy chủ DB không hoạt động.
- Máy chủ DB không chấp nhận kết nối TCP / IP.
- Máy chủ DB đã hết kết nối.
- 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:
- Xác minh và kiểm tra chúng bằng
ping
. - Làm mới DNS hoặc sử dụng địa chỉ IP trong URL JDBC.
- Xác minh nó dựa trên
my.cnf
của MySQL DB. - Khởi động DB.
- Xác minh xem mysqld có được khởi động mà không có tùy chọn
--skip-networking option
hay không . - 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
. - 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
là 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ó đượcConnection
trongtry-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 trongfinally
của mộttry-finally
khối. Kết thúc trongfinally
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 choStatement
,PreparedStatement
vàResultSet
.
Đó 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.