Java Database Connectivity (JDBC) adalah API Java standar untuk menghubungkan dan mengelola database serta mengeksekusi pernyataan SQL. Anda dapat menggunakan API Java JDBC untuk menghubungkan ke LindormTable dan mengembangkan aplikasi dengan Lindorm SQL. Topik ini menjelaskan cara mengembangkan aplikasi menggunakan API Java JDBC melalui protokol MySQL.
Prasyarat
Fitur kompatibilitas MySQL telah diaktifkan untuk instans Anda. Untuk informasi selengkapnya, lihat Aktifkan fitur kompatibilitas MySQL.
Anda harus menginstal lingkungan Java; diperlukan JDK 1.8 atau versi yang lebih baru.
Alamat IP klien Anda telah ditambahkan ke daftar putih instans Lindorm Anda. Untuk informasi selengkapnya, lihat Konfigurasikan daftar putih.
Prosedur
Tambahkan dependensi driver JDBC MySQL. Untuk proyek Maven, tambahkan dependensi tersebut ke bagian
dependenciesdalam filepom.xml. Contoh:<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.3.0</version> </dependency>PentingKami merekomendasikan penggunaan driver JDBC MySQL versi 8.0 atau yang lebih baru untuk menghubungkan ke LindormTable.
Untuk membuat koneksi JDBC MySQL di Java, tambahkan secara manual file JAR driver JDBC MySQL (
mysql-connector-java-x.x.x.jar) ke CLASSPATH Anda. Jika tidak, koneksi akan gagal.
Inisialisasi klien JDBC MySQL dan buat koneksi antara klien Anda dan data LindormTable.
Class.forName("com.mysql.cj.jdbc.Driver"); // Username database dari Konsol Lindorm. String username = "root"; // Password database dari Konsol Lindorm. String password = "root"; // Tentukan database yang akan dihubungkan. Jika diabaikan, database default akan digunakan. String database = "default"; // Titik akhir LindormTable untuk MySQL. Port 33060 bersifat tetap untuk MySQL dan tidak boleh diubah. Ganti database dengan nama database target Anda. Biarkan parameter lain tidak berubah untuk meningkatkan performa. String url = "jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/" + database + "?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=100&prepStmtCacheSqlLimit=50000000"; Properties properties = new Properties(); properties.put("user", username); properties.put("password", password); // Dapatkan koneksi. Connection connection = DriverManager.getConnection(url, properties);Parameter
Parameter
Deskripsi
url
URL JDBC untuk menghubungkan ke LindormTable melalui MySQL. Format:
jdbc:mysql://<titik akhir kompatibel MySQL>/<nama database>?<pengaturan koneksi>.Jika nama database tidak ditentukan, client akan terhubung ke database default. Untuk informasi selengkapnya tentang cara mendapatkan titik akhir kompatibel MySQL, lihat Lihat titik akhir.
Pengaturan koneksi meningkatkan performa. Tentukan semua pengaturan tersebut. Untuk detailnya, lihat Pengaturan koneksi.
PentingJika aplikasi Anda berjalan pada instance ECS, gunakan VPC untuk mengakses instans Lindorm demi keamanan yang lebih tinggi dan latensi jaringan yang lebih rendah.
Jika aplikasi Anda berjalan pada mesin lokal dan memerlukan akses Internet ke instans Lindorm, aktifkan titik akhir publik di Konsol Lindorm. Untuk informasi selengkapnya, lihat Lihat titik akhir LindormTable.
Jika Anda terhubung melalui VPC, tentukan alamat VPC kompatibel MySQL untuk url. Jika Anda terhubung melalui jaringan publik, tentukan alamat Internet kompatibel MySQL untuk url.
database
Nama database yang akan dihubungkan. Secara default, client terhubung ke database default.
username
Username dan password untuk menghubungkan ke LindormTable.
Jika Anda lupa password, ubah di sistem manajemen kluster LindormTable. Untuk informasi selengkapnya, lihat Ubah password pengguna.
password
Pengaturan koneksi
Parameter
Nilai contoh
Deskripsi
sslMode
disabled
Menentukan apakah driver JDBC menggunakan SSL untuk membuat koneksi terenkripsi. Kami merekomendasikan Anda menyetel parameter ini ke
disabled. Menyetel parameter ini kedisabledmencegah penggunaan SSL untuk koneksi terenkripsi dan meningkatkan performa.allowPublicKeyRetrieval
true
Apakah kunci publik RSA diambil dari server selama otentikasi. Setel ke
true.useServerPrepStmts
true
Apakah menggunakan prepared statement di sisi server. Setel ke
trueagar database menggunakan preprocessing SQL bawaannya, meningkatkan performa dan mengurangi risiko injeksi SQL.useLocalSessionState
true
Apakah menggunakan status sesi lokal untuk mengurangi round-trip ke server database. Setel ke
true.rewriteBatchedStatements
true
Apakah menulis ulang pernyataan batch. Setel ke
trueuntuk meningkatkan performa penulisan secara signifikan pada aplikasi yang menggunakan prepared statement dengan binding parameter batch.cachePrepStmts
true
Apakah menyimpan prepared statement dalam cache. Setel ke
trueuntuk mengurangi overhead pembuatan dan meningkatkan performa pada pernyataan yang sering dieksekusi.prepStmtCacheSize
100
Jumlah prepared statement yang disimpan dalam cache oleh driver JDBC. Pengaturan ini hanya berlaku jika cachePrepStmts disetel ke
true.CatatanNilai prepStmtCacheSize yang lebih besar mengonsumsi lebih banyak memori. Tetapkan nilai ini sesuai kebutuhan aktual Anda. Tingkatkan jika workload Anda memerlukan performa tinggi.
prepStmtCacheSqlLimit
500000
Menentukan panjang maksimum prepared statement yang dapat disimpan dalam cache. Pernyataan SQL yang melebihi panjang ini tidak akan dicache. Jika bisnis Anda sensitif terhadap performa, kami merekomendasikan Anda menaikkan nilai parameter ini.
Setelah koneksi berhasil dibuat, gunakan sintaks SQL LindormTable. Contoh:
String tableName = "sql_table_" + new Random().nextInt(1000); // Buat tabel. try (Statement statement = connection.createStatement()) { String sql = "create table if not exists " + tableName + "(id VARCHAR, name VARCHAR, primary key(id))"; int ret = statement.executeUpdate(sql); System.out.println(ret); } // Masukkan data. String upsertSql = "insert into " + tableName + "(id,name) values(?,?)"; try (PreparedStatement ps = connection.prepareStatement(upsertSql)) { int batchSize = 100; for (int i = 0; i < batchSize; i++) { ps.setString(1, "aa" + i); ps.setString(2, "bb" + i); // Tambahkan ke batch. ps.addBatch(); } int[] ret = ps.executeBatch(); System.out.println(Arrays.toString(ret)); } // Kueri data. String querySql = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(querySql)) { ps.setString(1, "aa1"); ResultSet rs = ps.executeQuery(); while (rs.next()) { String id = rs.getString(1); String name = rs.getString(2); System.out.println("id=" + id); System.out.println("name=" + name); } } // Hapus data. String deleteSql = "delete from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(deleteSql)) { ps.setString(1, "aa1"); ps.executeUpdate(); } // Tutup koneksi. Selalu tutup koneksi setelah menyelesaikan operasi untuk mencegah kebocoran. connection.close();Untuk informasi selengkapnya tentang sintaks SQL LindormTable, lihat Referensi SQL.
CatatanDalam Lindorm SQL,
INSERTmemiliki semantik yang sama denganUPSERT. Karena klien JDBC MySQL mengoptimalkanINSERT, gunakanINSERTuntuk penulisan data.Penulisan batch mengurangi jumlah panggilan RPC dibandingkan penulisan baris tunggal. Server memproses baris dalam batch, sehingga mencapai throughput yang lebih tinggi. Namun, jumlah baris per batch yang terlalu banyak dapat menyebabkan error kehabisan memori (OOM) atau garbage collection penuh (Full GC), yang berdampak pada stabilitas layanan. Kendalikan ukuran batch. batchSize adalah jumlah baris per batch. Tetapkan antara 50 hingga 100.
Tingkatkan throughput penulisan dengan meningkatkan konkurensi penulisan.