Java Database Connectivity (JDBC), veritabanlarına bağlanmak ve bunları yönetmek için kullanılan standart bir Java API'sidir. Bu konu, MySQL JDBC sürücüsünü kullanarak MySQL protokolü üzerinden LindormTable'a nasıl bağlanılacağını ve Lindorm SQL ile CRUD işlemlerinin nasıl yürütüleceğini gösterir.
Çalışma mantığı
Projenize MySQL JDBC sürücü bağımlılığını ekleyin.
Sürücüyü başlatın ve LindormTable'ın MySQL uyumlu uç noktasını hedefleyen bir JDBC URL'si kullanarak bağlantı kurun.
Tablolar oluşturmak, veri yazmak, sorgulamak ve kayıtları silmek için Lindorm SQL ile standart JDBC API'lerini kullanın.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Lindorm örneğinizde MySQL uyumluluk özelliği etkinleştirilmiş olmalıdır. Bkz. MySQL uyumluluk özelliğini etkinleştirme
JDK 1.8 veya üzeri bir sürüm yüklü olmalıdır
İstemci IP adresiniz Lindorm örnek izin listesine eklenmiş olmalıdır. Bkz. İzin listesi yapılandırma
Adım 1: MySQL JDBC sürücüsünü ekleme
Maven projesi için, pom.xml dosyasındaki dependencies bölümüne aşağıdaki bağımlılığı ekleyin:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
Gradle projesi için, build.gradle dosyanıza aşağıdakileri ekleyin:
implementation 'com.mysql:mysql-connector-j:8.3.0'
MySQL JDBC sürücü sürümü olarak 8,0 veya üzerini kullanın. Maven/Gradle dışı projeler için, mysql-connector-java-x.x.x.jar dosyasını CLASSPATH'inize manuel olarak eklemeniz gerekir; aksi takdirde bağlantı başarısız olur.
Adım 2: LindormTable'a bağlanma
MySQL JDBC sürücüsünü başlatın ve bir bağlantı kurun:
Class.forName("com.mysql.cj.jdbc.Driver");
// The database username from the Lindorm console.
String username = "root";
// The database password from the Lindorm console.
String password = "root";
// Specify the database to connect to. If omitted, the default database is used.
String database = "default";
// The LindormTable endpoint for MySQL. Port 33060 is fixed and must not be changed.
// Replace the hostname with your actual MySQL-compatible endpoint.
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);
Connection connection = DriverManager.getConnection(url, properties);
Bağlantı parametreleri
| Parametre | Açıklama |
|---|---|
url |
MySQL üzerinden LindormTable için JDBC URL'si. Biçim: jdbc:mysql://<MySQL uyumlu uç nokta>/<veritabanı>?<bağlantı ayarları>. Veritabanı belirtilmezse istemci varsayılan veritabanına bağlanır. MySQL uyumlu uç noktayı almak için bkz. Uç noktaları görüntüleme. |
database |
Bağlanılacak veritabanı. Belirtilmezse varsayılan veritabanına bağlanır. |
username |
LindormTable kullanıcı adı. Unutulan bir parolayı sıfırlamak için bkz. Kullanıcı parolasını değiştirme. |
password |
LindormTable parolası. |
Uç noktayı, istemcinizin Lindorm örneğine erişim şekline göre seçin:
Virtual Private Cloud (VPC) (önerilen): MySQL uyumlu VPC adresini kullanın. Elastic Compute Service (ECS) örneklerinde çalışan uygulamalar, VPC bağlantısı sayesinde daha düşük gecikme süresi ve daha yüksek güvenlikten yararlanır.
Genel ağ: Lindorm konsolunda genel uç noktayı etkinleştirin ve MySQL uyumlu İnternet adresini kullanın. Bkz. LindormTable uç noktalarını görüntüleme.
Bağlantı ayarları
URL'deki tüm bağlantı ayarları gereklidir. Aşağıdaki tabloda her bir ayar açıklanmıştır:
| Parametre | Değer | Açıklama |
|---|---|---|
sslMode |
disabled |
SSL şifrelemesini devre dışı bırakır. Performansı artırır. |
allowPublicKeyRetrieval |
true |
Kimlik doğrulama sırasında RSA genel anahtarını sunucudan alır. |
useServerPrepStmts |
true |
Sunucu tarafında hazırlanmış deyimler kullanır, performansı artırır ve SQL enjeksiyonu riskini azaltır. |
useLocalSessionState |
true |
Veritabanı sunucusuna giden gidiş-dönüş trafiğini azaltmak için yerel oturum durumunu kullanır. |
rewriteBatchedStatements |
true |
Toplu INSERT çağrılarını çok satırlı deyimlere dönüştürerek yazma performansını büyük ölçüde artırır. Örneğin, üç ayrı ekleme işlemi tek bir deyim olarak gönderilir: INSERT INTO t (a) VALUES (1), (2), (3) şeklinde; üç ayrı INSERT INTO t (a) VALUES (?) çağrısı yerine. |
cachePrepStmts |
true |
Hazırlanmış deyimleri istemcide önbelleğe alır, sık yürütülen deyimler için oluşturma ek yükünü azaltır. |
prepStmtCacheSize |
100 |
Önbelleğe alınan hazırlanmış deyim sayısı. Yalnızca cachePrepStmts=true olduğunda etkili olur. İş yükünüz çok sayıda farklı SQL deyimi kullanıyorsa bu değeri artırın; ancak daha büyük bir önbelleğin daha fazla bellek tükettiğini unutmayın. |
prepStmtCacheSqlLimit |
50000000 |
Önbelleğe alınmaya uygun SQL deyimlerinin maksimum bayt uzunluğu. Bu değerden uzun deyimler önbelleğe alınmaz. Uzun SQL deyimleri içeren ve performans hassasiyeti olan iş yükleri için bu değeri artırın. |
Adım 3: SQL işlemlerini çalıştırma
Bağlantı kurulduktan sonra, tablolar oluşturmak, veri eklemek, sorgulamak ve silmek için Lindorm SQL'i kullanın:
String tableName = "sql_table_" + new Random().nextInt(1000);
// Create a table.
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);
}
// Insert data in a batch. Use INSERT — in Lindorm SQL, INSERT has UPSERT semantics.
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);
ps.addBatch();
}
int[] ret = ps.executeBatch();
System.out.println(Arrays.toString(ret));
}
// Query 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);
}
}
// Delete data.
String deleteSql = "DELETE FROM " + tableName + " WHERE id = ?";
try (PreparedStatement ps = connection.prepareStatement(deleteSql)) {
ps.setString(1, "aa1");
ps.executeUpdate();
}
// Always close the connection to prevent resource leaks.
connection.close();
Tam Lindorm SQL sözdizimi referansı için bkz. SQL referansı.
Kullanım notları
INSERT ve UPSERT anlamları
Lindorm SQL'de INSERT deyimi, UPSERT ile aynı anlama gelir. MySQL JDBC istemcisi INSERT deyimlerini optimize eder, bu nedenle tüm veri yazma işlemleri için INSERT kullanın.
Toplu yazma boyutu
Toplu yazma işlemleri, uzak yordam çağrısı (RPC) ek yükünü azaltır ve sunucunun her istekte birden fazla satırı işlemesine olanak tanır; bu da tek satırlı yazmalara kıyasla aktarım hızını artırır. Ancak, çok büyük toplu işler bellek yetersizliği (OOM) hatalarına veya tam çöp toplama (Full GC) duraklamalarına neden olabilir; bu durum hizmet kararlılığını düşürür. batchSize değerini 50 ile 100 satır arasında tutun. Genel yazma aktarım hızını artırmak için toplu iş boyutu yerine yazma eşzamanlılığını artırın.
Sonraki adımlar
SQL referansı — tam Lindorm SQL sözdizimi
Uç noktaları görüntüleme — MySQL uyumlu uç noktanızı bulma
İzin listesi yapılandırma — IP erişim kontrolünü yönetme