本文介紹通過Java語言的標準JDBC接口使用SQL開發Lindorm寬表應用的方法和示例。
前提條件
已安裝Java環境,要求安裝JDK 1.8及以上版本。
已將客戶端IP地址添加至Lindorm白名單,具體操作請參見設置白名單。
使用限制
本文操作僅適用于Lindorm寬表模式,不支持Lindorm Serverless。
操作步驟
您可以使用操作步驟中的示例代碼,也可以直接下載示例代碼在本地編譯和運行。本文中示例代碼在com.aliyun.lindorm.sql.demo.BasicDemo
類中。
下載Lindorm客戶端。以Maven項目為例,在pom.xml文件的
dependencies
中添加依賴項。示例代碼如下:<dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.1.3</version> </dependency>
初始化Lindorm客戶端并建立Lindorm客戶端和數據之間的連接。
//Lindorm寬表SQL的連接地址。 String url = "jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060"; // 配置連接參數 Properties properties = new Properties(); //Lindorm控制臺獲取的數據庫用戶名。 properties.put("user", "root"); //Lindorm控制臺獲取的數據庫密碼。 properties.put("password", "test"); //建立連接時可指定某一database。若不指定database,默認使用default。 properties.put("database", "default"); //獲取連接 Connection connection = DriverManager.getConnection(url, properties);
重要為了提高資源利用率,在連接Lindorm客戶端空閑十分鐘后,服務端會主動斷開連接。如果此時復用該連接,會出現
com.aliyun.lindorm.client.shaded.org.apache.calcite.avatica.http.ConnectionDisconnectedException
報錯,重新建立連接即可解決。連接使用到的參數及其說明如下:
參數
示例值
說明
url
jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060
Lindorm 寬表SQL地址。如何獲取,請參見查看連接地址。
重要如果應用部署在ECS實例,建議您通過專有網絡訪問Lindorm實例,可獲得更高的安全性和更低的網絡延遲。
如果應用部署在本地,在通過公網連接Lindorm實例前,需在控制臺開通公網地址。開通方式:在控制臺選擇
,在寬表引擎頁簽單擊開通公網地址。
user
root
如果您忘記用戶密碼,可以通過Lindorm寬表引擎的集群管理系統修改密碼。具體操作,請參見修改用戶密碼。
password
test
database
default
需要連接的數據庫名稱。默認連接default數據庫。
建立連接后,使用Lindorm寬表SQL Java API訪問Lindorm寬表。示例代碼如下:
/* -------------- 基于JDBC的CRUD示例 ----------------- */ String tableName = "sql_table_" + new Random().nextInt(1000); //創建表 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); } //插入數據 String upsertSql = "upsert 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(); } //執行全部批次的寫入。 //出于性能和穩定性考量,添加的批次數量不宜過大。 //建議一次executeBatch()寫入的批次數最多在百級別。 int[] ret = ps.executeBatch(); System.out.println(Arrays.toString(ret)); } //查詢數據 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); } } //刪除數據 String deleteSql = "delete from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(deleteSql)) { ps.setString(1, "aa1"); ps.executeUpdate(); } // 更新數據 // Lindorm SQL Update語句僅支持單行更新,不支持批量更新 // 即where條件必須指定全部主鍵 String updateSql = "update " + tableName + " set name = ? where id=?"; try (PreparedStatement ps = connection.prepareStatement(updateSql)) { ps.setString(1, "bb2update"); ps.setString(2, "aa2"); ps.executeUpdate(); } String querySql1 = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(querySql1)) { ps.setString(1, "aa2"); ResultSet rs = ps.executeQuery(); System.out.println("--------- update-----------"); while (rs.next()) { String id = rs.getString(1); String name = rs.getString(2); System.out.println("id=" + id); System.out.println("name=" + name); } } // 刪除表 String dropTable = "drop table " + tableName; try (Statement stmt = connection.createStatement()) { stmt.execute(dropTable); } //關閉連接,當結束操作時要確保連接被關閉,否則會造成連接泄漏。 connection.close();
常用框架訪問寬表引擎的示例
為了滿足更多用戶的需求,下文匯總了不同Java框架訪問Lindorm寬表引擎的代碼示例:
通過Druid框架訪問Lindorm寬表引擎,代碼示例請參見Druid訪問示例。
通過Spring框架訪問Lindorm寬表引擎,代碼示例請參見Spring訪問示例。
通過Mybatis框架訪問Lindorm寬表SQL,代碼示例請參見Mybatis訪問示例。
通過Hibernate框架訪問Lindorm寬表SQL,代碼示例請參見Hibernate訪問示例。
相關文檔
關于Lindorm寬表SQL的語法使用請參見SQL參考。