Trình kết nối mysql cho java 7

MariaDB Connector/J được sử dụng để kết nối các ứng dụng được phát triển bằng Java với cơ sở dữ liệu MariaDB và MySQL bằng API JDBC tiêu chuẩn. Thư viện được cấp phép LGPL

MariaDB Connector/J là trình điều khiển JDBC Loại 4. Nó được phát triển đặc biệt như một trình kết nối JDBC nhẹ để sử dụng với các máy chủ cơ sở dữ liệu MariaDB và MySQL. Ban đầu nó dựa trên mã Drizzle JDBC với nhiều bổ sung và sửa lỗi

Khả năng tương thích của máy chủ

MariaDB Connector/J tương thích với tất cả MariaDB và máy chủ MySQL phiên bản 5. 5. 3 trở lên

MariaDB Connector/J phát hành cũ hơn 1. 2. 0 có thể tương thích với các phiên bản máy chủ cũ hơn MariaDB 5. 5 và MySQL5. 5, nhưng các bản phát hành MariaDB Connector/J đó không còn được hỗ trợ nữa

Khả năng tương thích Java

Để xác định sê-ri bản phát hành MariaDB Connector/J nào sẽ là tốt nhất để sử dụng cho từng phiên bản Java, vui lòng xem bảng sau

Cài đặt Trình kết nối MariaDB/J

MariaDB Connector/J có thể được cài đặt bằng Maven, Gradle hoặc bằng cách đặt thủ công tệp

Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword");
4 vào
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
0 của bạn. Xem Cài đặt Trình kết nối MariaDB/J để biết thêm thông tin

MariaDB Connector/J

Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword");
4 tệp và tarball mã nguồn có thể được tải xuống từ URL sau

Các tệp MariaDB Connector/J

Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword");
4 cũng có thể được tải xuống từ URL sau

Cài đặt phụ thuộc

JNA (mạng. java. nhà phát triển. jna. jna) và JNA-PLATFORM (mạng. java. nhà phát triển. jna. nền tảng jna) 4. 2. 1 hoặc cao hơn cũng cần thiết khi bạn muốn kết nối với máy chủ bằng ổ cắm Unix hoặc ống dẫn Windows

Sử dụng trình điều khiển

Các tiểu mục sau hiển thị định dạng của chuỗi kết nối JDBC cho máy chủ cơ sở dữ liệu MariaDB và MySQL. Ngoài ra, mã mẫu được cung cấp minh họa cách kết nối với một trong các máy chủ này và tạo bảng

Bắt một kết nối mới

Có hai cách tiêu chuẩn để có được một kết nối

Sử dụng trình quản lý trình điều khiển

Cách ưa thích để có kết nối với MariaDB Connector/J là sử dụng lớp

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
3. Khi lớp
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
4 được sử dụng để định vị và tải MariaDB Connector/J, ứng dụng không cần cấu hình thêm. Lớp
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
4 sẽ tự động tải MariaDB Connector/J và cho phép nó được sử dụng giống như bất kỳ trình điều khiển JDBC nào khác

Ví dụ

Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword");

Cách cũ để tải trình điều khiển JDBC cũng vẫn hoạt động đối với Trình kết nối MariaDB/J. e. g.

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
6

jdbc. khả năng tương thích lược đồ mysql

Trình kết nối MariaDB/J 3. 0 chỉ chấp nhận

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
7 làm giao thức trong chuỗi kết nối theo mặc định. Khi cả Trình kết nối MariaDB/J và trình điều khiển MySQL đều được tìm thấy trong đường dẫn lớp, sử dụng
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
7 làm giao thức giúp đảm bảo rằng Java chọn Trình kết nối MariaDB/J

Trình kết nối/J vẫn cho phép

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
9 làm giao thức trong chuỗi kết nối khi tùy chọn
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
0 được đặt. Ví dụ

jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
1

(2. x đã cho phép các URL kết nối bắt đầu bằng cả

jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
2 và
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
3)

Sử dụng hồ bơi

Một cách khác để có kết nối với MariaDB Connector/J là sử dụng nhóm kết nối

MariaDB Connector/J cung cấp 2 triển khai nhóm Nguồn dữ liệu khác nhau

  • jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
    
    4. Việc thực hiện cơ bản. Nó tạo một kết nối mới mỗi khi phương thức
    jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
    
    5 được gọi
  • jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
    
    6. Triển khai nhóm kết nối. Nó duy trì một nhóm các kết nối và khi một kết nối mới được yêu cầu, một kết nối sẽ được mượn từ nhóm
Hồ bơi nội bộ

Cấu hình nhóm nội bộ của trình điều khiển cung cấp khả năng triển khai nhóm rất nhanh và xử lý các sự cố mà hầu hết nhóm java gặp phải

  • Làm sạch 2 trạng thái kết nối khác nhau sau khi phát hành
  • xử lý tình trạng không hoạt động (các kết nối trong nhóm sẽ được giải phóng nếu không được sử dụng sau một thời gian, tránh sự cố được tạo khi máy chủ đóng kết nối sau khi đạt đến @wait_timeout)

Xem tài liệu hồ bơi để biết thêm thông tin

hồ bơi bên ngoài

Khi sử dụng nhóm kết nối bên ngoài, lớp Trình điều khiển MariaDB

jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
7 phải được định cấu hình

Ví dụ sử dụng nhóm kết nối hikariCP JDBC

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);

Xin lưu ý rằng lớp trình điều khiển do MariaDB Connector/J cung cấp không phải là

jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
8 mà là
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 
7

Lớp

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
00 có thể được sử dụng khi cấu hình nguồn dữ liệu nhóm chỉ cho phép java. sql. Triển khai nguồn dữ liệu

chuỗi kết nối

Định dạng của chuỗi kết nối JDBC là

jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]] 

Máy chủMô tả

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
0

Một số lưu ý về điều này

  • Máy chủ lưu trữ phải là tên DNS hoặc địa chỉ IP
  • Nếu máy chủ là địa chỉ IPv6 thì địa chỉ đó phải nằm trong dấu ngoặc vuông
  • Cổng mặc định là
            final HikariDataSource ds = new HikariDataSource();
            ds.setMaximumPoolSize(20);
            ds.setDriverClassName("org.mariadb.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
            ds.addDataSourceProperty("user", "root");
            ds.addDataSourceProperty("password", "myPassword");
            ds.setAutoCommit(false);
    
    01
  • Loại mặc định là
            final HikariDataSource ds = new HikariDataSource();
            ds.setMaximumPoolSize(20);
            ds.setDriverClassName("org.mariadb.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
            ds.addDataSourceProperty("user", "root");
            ds.addDataSourceProperty("password", "myPassword");
            ds.setAutoCommit(false);
    
    02
  • Nếu chế độ chuyển đổi dự phòng và cân bằng tải được đặt thành
            final HikariDataSource ds = new HikariDataSource();
            ds.setMaximumPoolSize(20);
            ds.setDriverClassName("org.mariadb.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
            ds.addDataSourceProperty("user", "root");
            ds.addDataSourceProperty("password", "myPassword");
            ds.setAutoCommit(false);
    
    03, thì trình kết nối sẽ giả định rằng máy chủ đầu tiên là chủ và các máy chủ khác là phụ theo mặc định, nếu loại của chúng không được đề cập rõ ràng
  • tiền tố chuyển đổi dự phòng aurora khả dụng trên 2. phiên bản x

ví dụ

  •         final HikariDataSource ds = new HikariDataSource();
            ds.setMaximumPoolSize(20);
            ds.setDriverClassName("org.mariadb.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
            ds.addDataSourceProperty("user", "root");
            ds.addDataSourceProperty("password", "myPassword");
            ds.setAutoCommit(false);
    
    04
  •         final HikariDataSource ds = new HikariDataSource();
            ds.setMaximumPoolSize(20);
            ds.setDriverClassName("org.mariadb.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
            ds.addDataSourceProperty("user", "root");
            ds.addDataSourceProperty("password", "myPassword");
            ds.setAutoCommit(false);
    
    05
  •         final HikariDataSource ds = new HikariDataSource();
            ds.setMaximumPoolSize(20);
            ds.setDriverClassName("org.mariadb.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
            ds.addDataSourceProperty("user", "root");
            ds.addDataSourceProperty("password", "myPassword");
            ds.setAutoCommit(false);
    
    06
  •         final HikariDataSource ds = new HikariDataSource();
            ds.setMaximumPoolSize(20);
            ds.setDriverClassName("org.mariadb.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
            ds.addDataSourceProperty("user", "root");
            ds.addDataSourceProperty("password", "myPassword");
            ds.setAutoCommit(false);
    
    07

Chế độ chuyển đổi dự phòng và cân bằng tải

Các chế độ chuyển đổi dự phòng và cân bằng tải đã được giới thiệu trong MariaDB Connector/J 1. 2. 0

tài xế 3. 0 là bản viết lại hoàn chỉnh của trình kết nối. Hỗ trợ cụ thể cho cực quang chưa được triển khai trong 3. 0, vì nó dựa trên đường ống dẫn. Aurora không tương thích với đường ống. Các vấn đề đối với Aurora ngày càng chồng chất mà cộng đồng không đề xuất bất kỳ PR nào cho chúng và không có quyền truy cập để chúng tôi kiểm tra những sửa đổi đó. (2. x có hỗ trợ 5 năm)

Xem mô tả chuyển đổi dự phòng để biết thêm thông tin

Tham số URL tùy chọn

Nhật xét chung. Các tùy chọn không xác định được chấp nhận và âm thầm bỏ qua

Các tùy chọn sau hiện đang được hỗ trợ

thông số cần thiết

Thông số TLS

thêm thông tin về Sử dụng TLS/SSL với trình kết nối java MariaDB

Tham số hồ bơi

Xem tài liệu nhóm để biết cấu hình nhóm

Các thông số ít được sử dụng

tùy chọn đã xóa

Ghi chú triển khai API JDBC

Giải pháp tốt nhất là luôn có máy khách và máy chủ chia sẻ cùng một múi giờ

Nếu không phải như vậy, một số tùy chọn cho phép sửa hành vi đó. Trong 2. x, có 2 tùy chọn `useLegacyDatetimeCode` và `serverTimezone` kiểm soát chênh lệch múi giờ. Các tùy chọn đó hiện đã bị xóa trong 3. x, vì chúng không tuân thủ tốt chức năng thời gian

kể từ 3. 0. 0, tùy chọn mới 'múi giờ' cho phép xử lý sự khác biệt về múi giờ

Tùy chọn `múi giờ` có thể có 3 loại giá trị

  • 'đã tắt' (mặc định). trình kết nối không thay đổi time_zone
  • 'Tự động'. trình kết nối sẽ đặt biến kết nối time_zone thành múi giờ mặc định của java
  • ''. trình kết nối sẽ đặt biến kết nối thành giá trị

thí dụ

  • jdbc. mariadb. máy chủ cục bộ/?múi giờ=+5. 00
  • jdbc. mariadb. máy chủ cục bộ/?múi giờ=tự động
  • jdbc. mariadb. localhost/?timezone=America/New_York

Giá trị được đề xuất là đặt múi giờ thành 'tự động'. Sau đó, trình kết nối sẽ biến kết nối múi giờ thành giá trị `múi giờ` khi tạo kết nối. Điều này cho phép sử dụng an toàn chức năng thời gian của máy chủ. Nếu máy khách sử dụng múi giờ IANA, máy chủ có thể phải tải thông tin về múi giờ, xem mysql_tzinfo_to_sql và các múi giờ, và những múi giờ đó không được điền theo mặc định

"TẢI DỮ LIỆU VÀO TẬP TIN"

LOAD DATA INFILE là cách nhanh nhất để tải dữ liệu. Kể từ MariaDB 10. 2, bây giờ cách nhanh nhất là thực thi JDBC chuẩn() khi tùy chọn 'useBulkStmts' được bật

Cách nhanh nhất để tải nhiều dữ liệu là sử dụng LOAD DATA INFILE.
Tuy nhiên, sử dụng "LOAD DATA LOCAL INFILE" (nghĩa là. tải tệp từ ứng dụng khách) có thể là sự cố bảo mật nếu ai đó có thể thực hiện truy vấn từ ứng dụng khách, anh ta có thể có quyền truy cập vào bất kỳ tệp nào trên ứng dụng khách (theo quyền của người dùng đang chạy quy trình ứng dụng khách).

Một tùy chọn cụ thể "allowLocalInfile" (mặc định là true) có thể tắt chức năng này ở phía máy khách. Biến toàn cục local_infile có thể tắt LOAD DATA LOCAL INFILE ở phía máy chủ

Trình điều khiển tuân theo các thông số kỹ thuật của JDBC, cho phép Tuyên bố. setQueryTimeout() cho một câu lệnh cụ thể

Nếu mục tiêu là đặt thời gian chờ cho tất cả các truy vấn, vì MariaDB 10. 1. 1, máy chủ cho phép giới hạn thời gian truy vấn bằng cách đặt biến hệ thống max_statement_time

Giải pháp này sẽ xử lý thời gian chờ truy vấn tốt hơn (và nhanh hơn) so với các giải pháp java (JPA2, "javax. kiên trì. truy vấn. timeout", giải pháp tích hợp Pools như tomcat jdbc-pool "queryTimeout". )

Tùy chọn "sessionVariables" cho phép dễ dàng đặt biến hệ thống này. Thí dụ

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
0

Bộ kết quả truyền trực tuyến

Theo mặc định,

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
08 sẽ đọc toàn bộ kết quả từ máy chủ. Với các tập kết quả lớn, điều này sẽ yêu cầu dung lượng bộ nhớ lớn

Để tránh sử dụng quá nhiều bộ nhớ, hãy sử dụng Statement. setFetchSize(int numberOfRowInMemory) để cho biết số hàng sẽ được lưu trữ trong bộ nhớ
Ví dụ.
sử dụng

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
09 cho biết 1000 hàng sẽ được lưu trữ trong bộ nhớ.
Vì vậy, khi truy vấn được thực thi, 1000 hàng sẽ nằm trong bộ nhớ. Sau 1000
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
00, 1000 hàng tiếp theo sẽ được lưu trong bộ nhớ, v.v.

Lưu ý rằng máy chủ thường mong đợi máy khách đọc tập kết quả tương đối nhanh. Biến máy chủ net_write_timeout kiểm soát hành vi này (mặc định là 60 giây). Nếu bạn không mong đợi kết quả sẽ được xử lý trong khoảng thời gian này thì có một khả năng khác

  • Với >= MariaDB 10. 1. 2, bạn có thể sử dụng truy vấn "SET STATEMENT net_write_timeout=10000 FOR XXX" với XXX truy vấn "bình thường" của bạn. Điều này sẽ chỉ ra rằng cụ thể đối với truy vấn này, net_write_timeout sẽ được đặt thành thời gian dài hơn (10000 trong ví dụ này)
  • đối với các máy chủ cũ hơn, một truy vấn cụ thể sẽ phải tạm thời đặt net_write_timeout ("SET STATEMENT net_write_timeout=. ") và đặt lại sau đó
  • nếu ứng dụng của bạn thường sử dụng nhiều truy vấn dài với kích thước tìm nạp, kết nối có thể được thiết lập bằng tùy chọn "Session Variables=net_write_timeout=xxx"

Ngay cả khi sử dụng setFetchSize, máy chủ sẽ gửi tất cả kết quả cho máy khách

Nếu một truy vấn khác được thực hiện trên cùng một kết nối khi tập kết quả phát trực tuyến chưa được đọc đầy đủ, trình kết nối sẽ đặt toàn bộ tập kết quả phát trực tuyến còn lại vào bộ nhớ để thực hiện truy vấn tiếp theo. Điều này có thể dẫn đến OutOfMemoryError nếu không được xử lý

Trước phiên bản 1. 4. 0, giá trị duy nhất được chấp nhận cho kích thước tìm nạp là

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
01 (tương đương với
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
02). Giá trị này vẫn được chấp nhận vì lý do tương thích nhưng nên sử dụng
        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
02, vì theo JDBC, giá trị phải >= 0

báo cáo chuẩn bị

Trình điều khiển sử dụng các câu lệnh do máy chủ chuẩn bị làm tiêu chuẩn để giao tiếp với cơ sở dữ liệu (kể từ 1. 3. 0). Nếu tùy chọn "allowMultiQueries" được đặt thành true, trình điều khiển sẽ chỉ sử dụng giao thức văn bản. Các câu lệnh đã chuẩn bị (thay thế tham số) được xử lý bởi trình điều khiển, ở phía máy khách

CallableStatement

Việc triển khai câu lệnh có thể gọi được sẽ không cần truy cập siêu dữ liệu thủ tục được lưu trữ (mysql. proc) nếu cả hai điều sau đều đúng

  • CallableStatement. getMetadata() không được sử dụng
  • Các tham số được truy cập theo chỉ mục, không phải theo tên

Khi có thể, tuân theo hai quy tắc trên sẽ cung cấp cả tốc độ tốt hơn và loại bỏ những lo ngại về đặc quyền CHỌN trên mysql. bảng proc

Giới hạn khóa được tạo

Java cho phép truy xuất các khóa được tạo lần cuối, sử dụng Tuyên bố. getGeneratedKeys()

Thí dụ

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
7

Chỉ khóa được tạo đầu tiên sẽ được trả về, nghĩa là đối với nhiều lần chèn, khóa được tạo được truy xuất sẽ tương ứng với giá trị được tạo đầu tiên của lệnh

Nếu cần truy xuất tất cả các giá trị được tạo cho nhiều lần chèn, vui lòng sử dụng INSERT. Lệnh TRỞ LẠI (kể từ MariaDB 10. 5)

Các lớp JDBC tùy chọn

Các giao diện tùy chọn sau được triển khai bởi tổ chức. mariadb. jdbc. Lớp MariaDbDataSource. javax. sql. Nguồn dữ liệu, javax. sql. Kết nốiPoolDataSource, javax. sql. Nguồn dữ liệu XA

cẩn thận. tổ chức. mariadb. jdbc. MySQLDataSource không còn tồn tại nữa và nên được thay thế bằng org. mariadb. jdbc. MariaDbDataSource kể từ v1. 3. 0

Ví dụ sử dụng

Đoạn mã sau cung cấp một ví dụ cơ bản về cách kết nối với máy chủ MariaDB hoặc MySQL và tạo bảng

Tạo Bảng trên Máy chủ MariaDB hoặc MySQL

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
8

Dịch vụ

Tài xế thực hiện 3 loại dịch vụ

  • Dịch vụ xác thực. cấp giấy chứng nhận
  • Dịch vụ xác thực. cho phép thêm plugin xác thực ứng dụng khách
  • Dịch vụ nhà máy SSL. triển khai TSL tùy chỉnh

Dịch vụ xác thực

Thông tin đăng nhập thường được đặt bằng người dùng/mật khẩu trong chuỗi kết nối hoặc bằng cách sử dụng DriverManager. getConnection(Chuỗi url, Người dùng chuỗi, Mật khẩu chuỗi)

Plugin xác thực cho phép cung cấp thông tin xác thực từ các phương tiện khác. Các plugin đó phải được kích hoạt tùy chọn cài đặt `credentialType` cho plugin được chỉ định

Trình điều khiển có 3 plugin mặc định

IAM AWS

Điều này cho phép xác thực IAM cơ sở dữ liệu AWS. Plugin tạo mã thông báo bằng thông tin xác thực IAM và khu vực. Mã thông báo có giá trị trong 15 phút và được lưu trong bộ nhớ cache trong 10 phút

Để sử dụng xác thực thông tin xác thực này, com. amazonaws. phần phụ thuộc aws-java-sdk-rds phải được đăng ký trong đường dẫn lớp. Triển khai sử dụng SDK DefaultAWSCredentialsProviderChain và DefaultAwsRegionProviderChain để nhận thông tin xác thực IAM và khu vực. xem DefaultAWSCredentialsProviderChain và DefaultAwsRegionProviderChain để kiểm tra cách truy xuất những thông tin đó (biến môi trường/thuộc tính hệ thống, tệp,. )

Thí dụ.

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
04

với bộ biến môi trường AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY và AWS_REGION

Môi trường

Người dùng và Mật khẩu được lấy từ các biến môi trường. các biến môi trường mặc định là MARIADB_USER và MARIADB_PWD, nhưng có thể thay đổi bằng cách đặt tùy chọn bổ sung `userKey` và `pwdKey`

Thí dụ. sử dụng chuỗi kết nối

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
05 người dùng và mật khẩu sẽ được truy xuất từ ​​biến môi trường MARIADB_USER và MARIADB_PWD

Tài sản

Người dùng và Mật khẩu được lấy từ thuộc tính java. tên thuộc tính mặc định là mariadb. người dùng và mariadb. pwd, nhưng có thể thay đổi tên thuộc tính bằng cách đặt tùy chọn bổ sung `userKey` và `pwdKey`

Thí dụ. sử dụng chuỗi kết nối

        final HikariDataSource ds = new HikariDataSource();
        ds.setMaximumPoolSize(20);
        ds.setDriverClassName("org.mariadb.jdbc.Driver");
        ds.setJdbcUrl("jdbc:mariadb://localhost:3306/db");
        ds.addDataSourceProperty("user", "root");
        ds.addDataSourceProperty("password", "myPassword");
        ds.setAutoCommit(false);
06 người dùng và mật khẩu sẽ được truy xuất từ ​​các thuộc tính java `mariadbUser` và `mariadbPwd`

Các plugin xác thực ứng dụng khách hiện được định nghĩa là dịch vụ. Điều này cho phép dễ dàng thêm các plugin xác thực ứng dụng khách mới

Danh sách các plugin xác thực trong trình kết nối java

  • mysql_clear_password
  • auth_gssapi_client
  • client_ed25519
  • mysql_native_password
  • mysql_old_password
  • hộp thoại (PAM)
  • sha256_mật khẩu
  • caching_sha2_password

Các plugin xác thực mới có thể được tạo giao diện triển khai tổ chức. mariadb. jdbc. xác thực. AuthenticationPlugin và liệt kê plugin mới trong META-INF/services/org. mariadb. jdbc. xác thực. Tệp plugin xác thực

Dịch vụ nhà máy SSL

Triển khai SSL tùy chỉnh có thể được sử dụng khi triển khai Kết nối với máy chủ ban đầu tạo một ổ cắm. Khi được đặt, ổ cắm SSL được xếp lớp trên ổ cắm hiện có này. tổ chức triển khai. mariadb. jdbc. tls. TlsSocketPlugin cho phép cung cấp triển khai SSL tùy chỉnh, chẳng hạn như tạo triển khai HostnameVerifier mới

Triển khai tùy chỉnh cần triển khai tổ chức. mariadb. jdbc. tls. TlsSocketPlugin và dịch vụ đăng ký META-INF/services/org. mariadb. jdbc. tls. TlsSocketPlugin

Triển khai tùy chỉnh được kích hoạt bằng tùy chọn `tlsSocketType`

Ghi nhật ký dễ sử dụng

Trong Trình kết nối MariaDB/J 3. 0, ghi nhật ký hiện có thể được bật khi chạy. Trình kết nối/J sử dụng API slf4j nếu được cài đặt. Mặt khác, Trình kết nối/J sử dụng trình ghi nhật ký/bảng điều khiển JDK

tên logger là "org. mariadb. jdbc"

Trình kết nối/J hỗ trợ các mức ghi nhật ký Java sau

Cẩn thận với cấp độ "trace", mục đích là ghi lại tất cả các trao đổi với máy chủ. Điều này có nghĩa là lượng dữ liệu khổng lồ. Cấu hình không hợp lệ có thể dẫn đến sự cố, chẳng hạn như làm đầy đĩa nhanh chóng

Ví dụ về định cấu hình cấp độ "dấu vết" trên trình điều khiển để đăng nhập lại. đăng nhập lại tập tin. xml trong src/main/resource/

Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword");
2

Ví dụ về nhật ký được tạo

Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword");
3

Tích hợp liên tục và kiểm thử tự động

Để biết kết quả kiểm tra tự động và tích hợp liên tục của MariaDB Connector/J, vui lòng xem Travis CI của MariaDB Connector/J

báo lỗi

Nếu bạn tìm thấy lỗi, vui lòng báo cáo qua dự án CONJ trên trình theo dõi lỗi Jira của MariaDB

Mã nguồn

Mã nguồn có sẵn tại kho lưu trữ mariadb-connector-j trên GitHub

Giấy phép

GNU Lesser General Public License do Tổ chức Phần mềm Tự do xuất bản; . 1 của Giấy phép hoặc (tùy chọn của bạn) bất kỳ phiên bản mới hơn nào

Đối với các câu hỏi về cấp phép, hãy xem Câu hỏi thường gặp về cấp phép

F. A. Q

Lỗi "Không thể đọc tập kết quả. kết thúc luồng không mong muốn, đọc 0 byte từ 4"

Có một vấn đề giao tiếp với máy chủ

Hầu hết trường hợp này xảy ra do đọc một truy vấn có tập kết quả lớn; . Biến máy chủ net_write_timeout kiểm soát hành vi này (mặc định là 60 giây). Nếu máy khách không đọc toàn bộ tập kết quả trong khoảng thời gian đó, máy chủ sẽ hủy kết nối. Nếu bạn không mong đợi kết quả sẽ được xử lý trong khoảng thời gian này thì có một khả năng khác

  • nếu phiên bản máy chủ của bạn >= MariaDB 10. 1. 2, bạn có thể sử dụng truy vấn "SET STATEMENT net_write_timeout=10000 FOR XXX" với XXX là truy vấn "bình thường" của bạn. Điều này sẽ chỉ ra rằng cụ thể đối với truy vấn này, net_write_timeout sẽ được đặt thành thời gian dài hơn (10000 trong ví dụ này)
  • đối với các máy chủ cũ hơn, một truy vấn cụ thể sẽ phải tạm thời đặt net_write_timeout ("SET STATEMENT net_write_timeout=. ") và đặt lại sau đó
  • nếu ứng dụng của bạn thường sử dụng nhiều truy vấn dài với kích thước tìm nạp, kết nối có thể được đặt bằng tùy chọn "Biến phiên=net_write_timeout=xxx"

Cách thực hiện Ping nhẹ / Tránh hàng loạt "chọn 1"

Sự liên quan. isValid() là một cách tiếp cận tốt. Sự liên quan. isValid() đang thực hiện ping (ping trong giao thức mysql, không phải ping mạng). Nhóm kết nối sử dụng Xác thực JDBC4 đang tự động sử dụng Kết nối này. isValid()

Phiên bản mới nhất của MySQL Connector Java là gì?

31 (2022-10-11, Sẵn có chung) Phiên bản 8. 0. 31 là bản phát hành Tính khả dụng chung mới nhất của 8. 0 loạt Trình kết nối MySQL/J.

Trình kết nối MySQL trong Java là gì?

MySQL Connector/J là trình điều khiển JDBC Type 4 , triển khai JDBC 4. 2 đặc điểm kỹ thuật. Chỉ định Loại 4 có nghĩa là trình điều khiển là một triển khai Java thuần túy của giao thức MySQL và không dựa vào các thư viện máy khách MySQL.

MySQL có thể kết nối với Java không?

Trong Java, chúng ta có thể kết nối với cơ sở dữ liệu (MySQL) của mình bằng JDBC (Kết nối cơ sở dữ liệu Java) thông qua mã Java . JDBC là một trong những API tiêu chuẩn để kết nối cơ sở dữ liệu, sử dụng nó, chúng ta có thể dễ dàng chạy truy vấn, câu lệnh và cũng có thể tìm nạp dữ liệu từ cơ sở dữ liệu.

Trình kết nối MySQL tiêu chuẩn là gì?

The API MySQL C . libmysqlclient được bao gồm trong các bản phân phối của MySQL. Xem thêm Triển khai API MySQL C.