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ứcjdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]
5 được gọijdbc: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
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àiKhi 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];
04final 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];
05final 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];
06final 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[]