MariaDB Connector/J digunakan untuk menghubungkan aplikasi yang dikembangkan di Java ke database MariaDB dan MySQL menggunakan JDBC API standar. Perpustakaan ini berlisensi LGPL
MariaDB Connector/J adalah driver JDBC Tipe 4. Ini dikembangkan secara khusus sebagai konektor JDBC ringan untuk digunakan dengan server database MariaDB dan MySQL. Awalnya didasarkan pada kode Drizzle JDBC dengan banyak tambahan dan perbaikan bug
Kompatibilitas Server
MariaDB Connector/J kompatibel dengan semua server MariaDB dan MySQL versi 5. 5. 3 dan selanjutnya
Rilis MariaDB Connector/J lebih lama dari 1. 2. 0 mungkin kompatibel dengan versi server yang lebih lama dari MariaDB 5. 5 dan MySQL5. 5, tetapi rilis MariaDB Connector/J tersebut tidak didukung lagi
Kompatibilitas Java
Untuk menentukan seri rilis MariaDB Connector/J mana yang paling baik digunakan untuk setiap versi Java, silakan lihat tabel berikut
Menginstal Konektor MariaDB/J
MariaDB Connector/J dapat diinstal menggunakan Maven, Gradle, atau dengan meletakkan file
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];1 secara manual di
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];2 Anda. Lihat Memasang MariaDB Connector/J untuk informasi lebih lanjut
File MariaDB Connector/J
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];1 dan tarbal kode sumber dapat diunduh dari URL berikut
File MariaDB Connector/J
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];_1 juga dapat diunduh dari URL berikut
Menginstal Ketergantungan
JNA [bersih. Jawa. dev. jna. jna] dan JNA-PLATFORM [net. Jawa. dev. jna. jna-platform] 4. 2. 1 atau lebih besar juga diperlukan saat Anda ingin terhubung ke server dengan soket Unix atau pipa windows
Menggunakan Driver
Subbagian berikut menunjukkan pemformatan string koneksi JDBC untuk server database MariaDB dan MySQL. Selain itu, kode contoh disediakan yang menunjukkan cara menyambung ke salah satu server ini dan membuat tabel
Mendapatkan Koneksi Baru
Ada dua cara standar untuk mendapatkan koneksi
Menggunakan DriverManager
Cara yang disukai untuk mendapatkan koneksi dengan MariaDB Connector/J adalah dengan menggunakan kelas
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];5. Saat kelas
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 digunakan untuk mencari dan memuat MariaDB Connector/J, aplikasi tidak memerlukan konfigurasi lebih lanjut. Kelas
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 akan memuat MariaDB Connector/J secara otomatis dan memungkinkannya digunakan dengan cara yang sama seperti driver JDBC lainnya
Sebagai contoh
Connection connection = DriverManager.getConnection["jdbc:mariadb://localhost:3306/DB?user=root&password=myPassword"];
Cara lama memuat driver JDBC juga masih berfungsi untuk MariaDB Connector/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];_8
jdbc. kompatibilitas skema mysql
Konektor MariaDB/J 3. 0 hanya menerima
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 sebagai protokol dalam string koneksi secara default. Ketika MariaDB Connector/J dan driver MySQL ditemukan di jalur kelas, menggunakan
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 sebagai protokol membantu memastikan bahwa Java memilih MariaDB Connector/J
Connector/J masih mengizinkan
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]_1 sebagai protokol dalam string koneksi saat opsi
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]2 disetel. Sebagai contoh
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]_3
[2. versi x mengizinkan URL koneksi yang dimulai dengan
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]4 dan
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]5]
Menggunakan Kolam
Cara lain untuk mendapatkan koneksi dengan MariaDB Connector/J adalah dengan menggunakan kumpulan koneksi
MariaDB Connector/J menyediakan 2 implementasi kumpulan Sumber Data yang berbeda
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]
_6. Implementasi dasar. Itu membuat koneksi baru setiap kali metodejdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]
7 dipanggiljdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]
_8. Implementasi kumpulan koneksi. Itu memelihara kumpulan koneksi, dan ketika koneksi baru diminta, satu dipinjam dari kumpulan
Konfigurasi kumpulan internal driver menyediakan implementasi kumpulan yang sangat cepat dan menangani masalah yang dimiliki sebagian besar kumpulan java
- 2 pembersihan status koneksi yang berbeda setelah rilis
- berurusan dengan non-aktivitas [koneksi di kumpulan akan dilepaskan jika tidak digunakan setelah beberapa waktu, menghindari masalah yang dibuat saat server menutup koneksi setelah @wait_timeout tercapai]
Lihat dokumentasi kumpulan untuk informasi lebih lanjut
Kolam luarSaat menggunakan kumpulan koneksi eksternal, kelas Driver MariaDB
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]9 harus dikonfigurasi
Contoh menggunakan kumpulan koneksi 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];
Harap perhatikan bahwa kelas driver yang disediakan oleh MariaDB Connector/J bukan
[:] or address=[host=][[port=]][[type=[master|slave]]]0 tetapi
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]9
Kelas
[:] or address=[host=][[port=]][[type=[master|slave]]]_2 dapat digunakan ketika konfigurasi sumber data kumpulan hanya mengizinkan java. sql. Implementasi sumber data
Rangkaian Sambungan
Format string koneksi JDBC adalah
jdbc:mariadb:[replication:|loadbalance:|sequential:]//[,...]/[database][?=[&=]]
Deskripsi Host
[:] or address=[host=][[port=]][[type=[master|slave]]]
Beberapa catatan tentang ini
- Tuan rumah harus berupa nama DNS atau alamat IP
- Jika host adalah alamat IPv6, maka harus berada di dalam tanda kurung siku
- Port default adalah
[:] or address=[host=][[port=]][[type=[master|slave]]]
3 - Jenis standarnya adalah
[:] or address=[host=][[port=]][[type=[master|slave]]]
_4 - Jika mode failover dan load-balancing diatur ke
[:] or address=[host=][[port=]][[type=[master|slave]]]
5, maka konektor mengasumsikan bahwa host pertama adalah master, dan yang lainnya adalah budak secara default, jika jenisnya tidak disebutkan secara eksplisit - awalan failover aurora tersedia di 2. versi x
Contoh
[:] or address=[host=][[port=]][[type=[master|slave]]]
6[:] or address=[host=][[port=]][[type=[master|slave]]]
7[:] or address=[host=][[port=]][[type=[master|slave]]]
8[:] or address=[host=][[port=]][[type=[master|slave]]]
_9
Mode Failover dan Load-Balancing
Mode Failover dan Load-Balancing diperkenalkan di MariaDB Connector/J 1. 2. 0
pengemudi 3. 0 adalah penulisan ulang konektor yang lengkap. Dukungan khusus untuk aurora belum diterapkan di 3. 0, karena bergantung pada perpipaan. Aurora tidak kompatibel dengan perpipaan. Masalah untuk Aurora menumpuk tanpa komunitas mengusulkan PR apa pun untuk mereka dan tanpa akses bagi kami untuk menguji modifikasi tersebut. [2. versi x memiliki dukungan 5 tahun]
Lihat deskripsi failover untuk informasi lebih lanjut
Parameter URL Opsional
Komentar umum. Opsi yang tidak diketahui diterima dan diabaikan secara diam-diam
Opsi berikut saat ini didukung
Parameter Esensial
Parameter TLS
informasi lebih lanjut tentang Menggunakan TLS/SSL dengan konektor Java MariaDB
Parameter Kolam
Lihat dokumentasi kumpulan untuk konfigurasi kumpulan
Parameter yang Jarang Digunakan
opsi dihapus
Catatan Implementasi API JDBC
Pertimbangan ukuran
GSSAPI di windows tidak didukung dengan baik di java, menyebabkan masalah berulang. Sejak 3. 1, waffle-jna ditandai sebagai ketergantungan untuk memberikan dukungan GSSAPI yang baik tanpa masalah. Ini memiliki kelemahan untuk membuat konektor dan dependensi menjadi ukuran sekitar 4Mb
Jika ukuran penting, ketergantungan dapat dihapus, konektor berfungsi dengan baik, hanya akan memiliki beberapa batasan menggunakan GSSAPI di windows
ini bisa dilakukan seperti ini
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna
dependencies { implementation['org.mariadb.jdbc:mariadb-java-client:3.1.0'] { exclude group: 'com.github.waffle', module: 'waffle-jna' } }
Solusi sederhananya adalah selalu membuat klien dan server berbagi zona waktu yang sama
Jika bukan itu masalahnya, beberapa opsi mengizinkan untuk memperbaiki perilaku itu. Dalam 2. x, ada 2 opsi `useLegacyDatetimeCode` dan `serverTimezone` yang mengontrol perbedaan zona waktu. Opsi tersebut sekarang dihapus di 3. versi x, karena mereka tidak mematuhi dengan baik
Sejak 3. 0. 0, izin 'zona waktu' opsi baru untuk menangani perbedaan zona waktu
Opsi `timezone` dapat memiliki 3 jenis nilai
- 'dinonaktifkan' [default]. konektor tidak mengubah zona_waktu
- 'mobil'. konektor akan mengatur variabel koneksi time_zone ke zona waktu default Java
- ''. konektor akan mengatur variabel koneksi ke nilai
Solusinya adalah mengatur zona waktu secara eksplisit ke 'otomatis' atau ke zona waktu eksplisit
contoh
- jdbc. mariadb. localhost/?timezone=+5. 00
- jdbc. mariadb. localhost/?timezone=otomatis
- jdbc. mariadb. localhost/?timezone=America/New_York
Nilai yang disarankan adalah menyetel zona waktu ke 'otomatis'. Connector kemudian akan mengubah variabel koneksi time_zone ke nilai `timezone` saat koneksi dibuat. Ini memungkinkan penggunaan server yang aman. Jika klien menggunakan zona waktu IANA, server mungkin harus memuat informasi zona waktu lihat mysql_tzinfo_to_sql dan zona waktu, dan itu tidak diisi secara default
Ini sesuai dengan perilaku konektor MySQL dengan opsi "connectionTimeZone" disetel dengan opsi "forceConnectionTimeZoneToSession" disetel ke true
"MUAT INFILE DATA"
LOAD DATA INFILE adalah cara tercepat untuk memuat data. Sejak MariaDB 10. 2, sekarang cara tercepat adalah JDBC executionBatch[] standar ketika opsi 'useBulkStmts' diaktifkan
Cara tercepat untuk memuat banyak data menggunakan LOAD DATA INFILE
Namun, menggunakan "LOAD DATA LOCAL INFILE" [mis. memuat file dari klien] dapat menjadi masalah keamanan jika seseorang dapat mengeksekusi kueri dari klien, ia dapat memiliki akses ke file apa pun di klien [sesuai dengan hak pengguna yang menjalankan proses klien]
Opsi khusus "allowLocalInfile" [default ke true] dapat menonaktifkan fungsionalitas ini di sisi klien. Variabel global dapat menonaktifkan LOAD DATA LOCAL INFILE di sisi server
Pengemudi mengikuti spesifikasi JDBC, mengizinkan Pernyataan. setQueryTimeout[] untuk pernyataan tertentu
Jika tujuannya adalah untuk menetapkan batas waktu untuk semua kueri, sejak MariaDB 10. 1. 1, server mengizinkan waktu kueri yang terbatas dengan menyetel variabel sistem
Solusi ini akan menangani batas waktu kueri lebih baik [dan lebih cepat] daripada solusi java [JPA2, "javax. kegigihan. pertanyaan. timeout", solusi terintegrasi Pools seperti Tomcat jdbc-pool "queryTimeout". ]
Opsi "sessionVariables" memungkinkan untuk mengatur variabel sistem ini dengan mudah. Contoh
#will set a maximum query timeout of 10 seconds for this connection jdbc:mariadb://localhost/db?user=user&sessionVariables=max_statement_time=10
Set Hasil Streaming
Secara default,
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna_0 akan membaca hasil lengkap yang ditetapkan dari server. Dengan kumpulan hasil yang besar, ini akan membutuhkan banyak memori
Untuk menghindari penggunaan terlalu banyak memori, lebih baik gunakan Pernyataan. setFetchSize[int numberOfRowInMemory] untuk menunjukkan jumlah baris yang akan disimpan di memori
Contoh
menggunakan
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna_1 menunjukkan bahwa 1000 baris akan disimpan dalam memori
Jadi, saat kueri dieksekusi, 1000 baris akan ada di memori. Setelah 1000
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna2, 1000 baris berikutnya akan disimpan di memori, dan seterusnya
Perhatikan bahwa server biasanya mengharapkan klien untuk membacakan set hasil dengan relatif cepat. Variabel server mengontrol perilaku ini [default ke 60an]. Jika Anda tidak mengharapkan hasil ditangani dalam jumlah waktu ini, ada kemungkinan berbeda
- Dengan >= MariaDB 10. 1. 2, Anda dapat menggunakan kueri "SET STATEMENT net_write_timeout=10000 FOR XXX" dengan XXX kueri "normal" Anda. Ini akan menunjukkan bahwa khusus untuk kueri ini, akan disetel ke waktu yang lebih lama [10.000 dalam contoh ini]
- untuk server yang lebih lama, kueri tertentu harus menyetel net_write_timeout untuk sementara ["SET STATEMENT net_write_timeout=. "], dan mengaturnya kembali sesudahnya
- jika aplikasi Anda biasanya menggunakan banyak kueri panjang dengan ukuran pengambilan, koneksi dapat diatur menggunakan opsi "variabel sesi = net_write_timeout = xxx"
Bahkan menggunakan setFetchSize, server akan mengirimkan semua hasil ke klien
Jika kueri lain dijalankan pada koneksi yang sama saat kumpulan hasil streaming belum sepenuhnya dibaca, konektor akan menempatkan seluruh kumpulan hasil streaming yang tersisa di memori untuk menjalankan kueri berikutnya. Ini dapat menyebabkan OutOfMemoryError jika tidak ditangani
Sebelum versi 1. 4. 0, satu-satunya nilai yang diterima untuk ukuran pengambilan adalah
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna3 [setara dengan
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna4]. Nilai ini masih diterima karena alasan kompatibilitas melainkan menggunakan
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna4, karena menurut JDBC nilainya harus >= 0
Pernyataan yang Disiapkan
Pengemudi menggunakan pernyataan yang disiapkan server sebagai standar untuk berkomunikasi dengan database [sejak 1. 3. 0]. Jika opsi "allowMultiQueries" disetel ke true, driver hanya akan menggunakan protokol teks. Pernyataan yang disiapkan [substitusi parameter] ditangani oleh driver, di sisi klien
Pernyataan yang Dapat Dipanggil
Implementasi pernyataan yang dapat dipanggil tidak perlu mengakses metadata prosedur tersimpan [mysql. proc] tabel jika kedua hal berikut ini benar
- Pernyataan yang Dapat Dipanggil. getMetadata[] tidak digunakan
- Parameter diakses berdasarkan indeks, bukan berdasarkan nama
Jika memungkinkan, mengikuti dua aturan di atas memberikan kecepatan yang lebih baik dan menghilangkan kekhawatiran tentang hak istimewa SELECT di mysql. tabel prok
Pembatasan kunci yang dihasilkan
Izin Java mengambil kunci yang dibuat terakhir, menggunakan
Contoh
Statement stmt = sharedConn.createStatement[]; stmt.execute[ "INSERT INTO executeGenerated[t2] values [100]", Statement.RETURN_GENERATED_KEYS]; ResultSet rs = stmt.getGeneratedKeys[]; rs.next[]; System.out.println[rs.getInt[1]];
Hanya kunci yang dihasilkan pertama yang akan dikembalikan, artinya untuk multi-insert, kunci yang dihasilkan diambil akan sesuai dengan nilai perintah yang dihasilkan pertama
Jika perlu mengambil semua nilai yang dihasilkan untuk banyak sisipan, harap gunakan INSERT. KEMBALI perintah [sejak MariaDB 10. 5]
Kelas JDBC opsional
Antarmuka opsional berikut diimplementasikan oleh org. mariadb. jdbc. kelas MariaDbDataSource. javax. sql. Sumber Data, javax. sql. ConnectionPoolDataSource, javax. sql. XADataSource
hati-hati. org. mariadb. jdbc. MySQLDataSource sudah tidak ada lagi dan harus diganti dengan org. mariadb. jdbc. MariaDbDataSource sejak v1. 3. 0
Contoh Penggunaan
Kode berikut memberikan contoh dasar tentang cara menyambung ke server MariaDB atau MySQL dan membuat tabel
Membuat Tabel di Server MariaDB atau MySQL
Connection connection = DriverManager.getConnection["jdbc:mariadb://localhost:3306/test", "username", "password"]; Statement stmt = connection.createStatement[]; stmt.executeUpdate["CREATE TABLE a [id int not null primary key, value varchar[20]]"]; stmt.close[]; connection.close[];
Jasa
Pengemudi mengimplementasikan 3 jenis layanan
- Layanan kredensial. izin pemberian kredensial
- Layanan otentikasi. mengizinkan penambahan plugin autentikasi klien
- Layanan pabrik SSL. implementasi TSL khusus
Layanan kredensial
Kredensial biasanya diatur menggunakan pengguna/kata sandi di string koneksi atau dengan menggunakan DriverManager. getConnection[String url, String pengguna, Kata sandi string]
Plugin kredensial mengizinkan untuk memberikan informasi kredensial dari cara lain. Plugin tersebut harus mengaktifkan opsi pengaturan `credentialType` ke plugin yang ditunjuk
Pengemudi memiliki 3 plugin default
IAM AWS
Ini memungkinkan autentikasi IAM database AWS. Plugin menghasilkan token menggunakan kredensial dan wilayah IAM. Token berlaku selama 15 menit dan di-cache selama 10 menit
Untuk menggunakan otentikasi kredensial ini, com. amazonaw. dependensi aws-java-sdk-rds harus didaftarkan di classpath. Implementasi menggunakan SDK DefaultAWSCredentialsProviderChain dan DefaultAwsRegionProviderChain untuk mendapatkan kredensial dan wilayah IAM. lihat DefaultAWSCredentialsProviderChain dan DefaultAwsRegionProviderChain untuk memeriksa bagaimana informasi tersebut dapat diambil [variabel lingkungan/properti sistem, file,. ]
Contoh.
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna_6
dengan set variabel lingkungan AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY dan AWS_REGION
Lingkungan
Pengguna dan Kata Sandi diambil dari variabel lingkungan. variabel lingkungan default adalah MARIADB_USER dan MARIADB_PWD, tetapi dapat diubah dengan menyetel opsi tambahan `userKey` dan `pwdKey`
Contoh. menggunakan string koneksi
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna7 pengguna dan kata sandi akan diambil dari variabel lingkungan MARIADB_USER dan MARIADB_PWD
Properti
Pengguna dan Kata Sandi diambil dari properti java. nama properti default adalah mariadb. pengguna dan mariadb. pwd, tetapi nama properti dapat diubah dengan menyetel opsi tambahan `userKey` dan `pwdKey`
Contoh. menggunakan string koneksi
org.mariadb.jdbc mariadb-java-client 3.1.0 com.github.waffle waffle-jna8 pengguna dan kata sandi akan diambil dari properti java `mariadbUser` dan `mariadbPwd`
Plugin otentikasi klien sekarang didefinisikan sebagai layanan. Ini memungkinkan untuk menambahkan plugin autentikasi klien baru dengan mudah
Daftar plugin autentikasi di konektor java
- mysql_clear_password
- auth_gssapi_client
- client_ed25519
- mysql_native_password
- mysql_old_password
- dialog [PAM]
- sha256_password
- caching_sha2_password
Plugin autentikasi baru dapat dibuat dengan mengimplementasikan interface org. mariadb. jdbc. autentikasi. AuthenticationPlugin, dan daftar plugin baru di META-INF/services/org. mariadb. jdbc. autentikasi. File AuthenticationPlugin
Layanan pabrik SSL
Implementasi SSL khusus dapat digunakan untuk mengimplementasikan Koneksi ke server pada awalnya membuat soket. Saat disetel, soket SSL dilapisi di atas soket yang ada ini. Organisasi pelaksana. mariadb. jdbc. tls. Izin TlsSocketPlugin untuk menyediakan implementasi SSL khusus misalnya membuat implementasi HostnameVerifier baru
Implementasi khusus perlu mengimplementasikan org. mariadb. jdbc. tls. TlsSocketPlugin dan daftarkan layanan META-INF/services/org. mariadb. jdbc. tls. TlsSocketPlugin
Implementasi khusus diaktifkan menggunakan opsi `tlsSocketType`
Pencatatan yang mudah digunakan
Di Konektor MariaDB/J 3. 0, logging sekarang dapat diaktifkan saat runtime. Connector/J menggunakan slf4j API jika diinstal. Jika tidak, Connector/J menggunakan logger / konsol JDK
nama logger adalah "org. mariadb. jdbc"
Connector/J mendukung level logging Java berikut
Hati-hati dengan level "jejak", tujuannya adalah untuk mencatat semua pertukaran dengan server. Ini berarti sejumlah besar data. Konfigurasi yang buruk dapat menimbulkan masalah, seperti mengisi disk dengan cepat
Contoh konfigurasi level "trace" pada driver untuk logback. logback file. xml di src/main/resources/
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
Contoh log yang dihasilkan
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
Integrasi Berkelanjutan dan Pengujian Otomatis
Untuk integrasi berkelanjutan MariaDB Connector/J dan hasil pengujian otomatis, silakan lihat MariaDB Connector/J's Travis CI
Melaporkan Bug
Jika Anda menemukan bug, harap laporkan melalui proyek CONJ di pelacak bug Jira milik MariaDB
Kode sumber
Kode sumber tersedia di repositori mariadb-connector-j di GitHub
Lisensi
Lisensi Publik Umum Kecil GNU seperti yang diterbitkan oleh Free Software Foundation; . 1 dari Lisensi, atau [sesuai pilihan Anda] versi yang lebih baru
Untuk pertanyaan tentang lisensi, lihat FAQ Perizinan
F. A. Q
Kesalahan "Tidak dapat membaca kumpulan hasil. akhir aliran yang tidak terduga, baca 0 byte dari 4"Ada masalah saat berkomunikasi dengan server
Sering kali hal ini disebabkan oleh pembacaan kueri yang memiliki kumpulan hasil yang besar; . Variabel server mengontrol perilaku ini [default ke 60an]. Jika klien tidak membaca seluruh hasil dalam waktu tersebut, server akan memutuskan koneksi. Jika Anda tidak mengharapkan hasil ditangani dalam waktu ini, ada kemungkinan lain
- jika versi server Anda >= MariaDB 10. 1. 2, Anda dapat menggunakan kueri "SET STATEMENT net_write_timeout=10000 FOR XXX" dengan XXX sebagai kueri "normal" Anda. Ini akan menunjukkan bahwa khusus untuk kueri ini, akan disetel ke waktu yang lebih lama [10.000 dalam contoh ini]
- untuk server yang lebih lama, kueri tertentu harus menyetel net_write_timeout untuk sementara ["SET STATEMENT net_write_timeout=. "], dan mengaturnya kembali sesudahnya
- jika aplikasi Anda biasanya menggunakan banyak kueri panjang dengan ukuran pengambilan, koneksi dapat disetel menggunakan opsi "Variabel sesi=net_write_timeout=xxx"
Cara Melakukan Ping Ringan/Hindari Massal "pilih 1"
Koneksi. isValid[] adalah pendekatan yang bagus. Koneksi. isValid[] sedang melakukan ping [ping dalam protokol mysql, bukan ping jaringan]. Kumpulan koneksi menggunakan Validasi JDBC4 menggunakan Koneksi ini secara otomatis. adalah benar[]