首頁
云原生多模數(shù)據(jù)庫 Lindorm
操作指南
寬表引擎(兼容HBase或Cassandra)
應(yīng)用開發(fā)教程
基于SQL的應(yīng)用開發(fā)
使用Avatica協(xié)議
基于Java連接池Druid的應(yīng)用開發(fā)
基于Java連接池Druid的應(yīng)用開發(fā)
本文介紹基于JDBC連接池Druid連接并訪問Lindorm寬表引擎的使用方法。
前提條件
已安裝Java環(huán)境,要求安裝JDK 1.8及以上版本。
已配置白名單,具體操作,請參見設(shè)置白名單。
寬表引擎的版本為2.3.1及以上版本,如何升級版本,請參見升級小版本。
準(zhǔn)備工作
通過連接池Druid連接Lindorm寬表引擎前,需要安裝連接池Druid和Lindorm JDBC Driver。以Maven項目為例,在
pom.xml
文件的dependencies中添加以下依賴項。<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.1.3</version> </dependency>
當(dāng)通過druid-spring-boot-starter使用Druid連接池時,需要先排除druid-spring-boot-starter依賴的Druid組件,然后顯式依賴Druid組件,如下所示。
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.11</version> <exclusions> <exclusion> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.1.3</version> </dependency>
操作步驟
說明
您可以直接下載示例代碼在本地編譯和運行,也可以使用示例代碼開發(fā)您的項目代碼。
配置連接池Druid的參數(shù)。在Maven項目的
src/main/resources
目錄中新建druid.properties
文件,并在文件中添加以下內(nèi)容。# 驅(qū)動類名,無需替換 driverClassName=com.aliyun.lindorm.table.client.Driver # url、username、password需要替換為業(yè)務(wù)實際的內(nèi)容,可以在Lindorm控制臺上獲取 url=jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****.lindorm.rds.aliyuncs.com:30060 username=**** password=**** # 連接屬性,指定要連接的database,需根據(jù)實際情況將****替換為實際的內(nèi)容 connectionProperties=database=**** # 初始化連接池即創(chuàng)建連接,建議保持不變 init=true # 初始化連接池時建立連接的個數(shù),可以根據(jù)實際情況調(diào)整 initialSize=10 # 連接池中允許的最小空閑連接數(shù)量,可以根據(jù)實際情況調(diào)整 minIdle=10 # 連接池中允許的最大連接數(shù)量,可以根據(jù)實際情況調(diào)整 maxActive=20 # 獲取連接最大等待時間,單位毫秒,建議保持不變 maxWait=30000 # 連接保活配置項,建議保持不變,否則可能出現(xiàn)連接斷開 # 異常ConnectionDisconnectedException druid.keepAlive=true druid.keepAliveBetweenTimeMillis=30000 minEvictableIdleTimeMillis=600000 maxEvictableIdleTimeMillis=900000 timeBetweenEvictionRunsMillis=5000 # 連接驗證配置項,建議保持不變 validationQuery=SELECT 1 testWhileIdle=true testOnBorrow=false testOnReturn=false # PreparedStatement緩存配置項,這里配置為關(guān)閉緩存,建議保持不變 # 否則運行時可能會出現(xiàn)NoSuchStatement異常 poolPreparedStatements=false maxOpenPreparedStatements=-1 druid.maxPoolPreparedStatementPerConnectionSize=-1
說明請根據(jù)注釋說明替換或者調(diào)整以下配置項:
更多配置項的說明請參見DruidDataSource配置屬性列表。
加載連接池Druid的參數(shù)并初始化連接池Druid。
// 加載參數(shù) Properties properties = new Properties(); InputStream inputStream = DruidPoolDemo.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(inputStream); // 初始化連接池 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
通過連接池Druid獲取JDBC的連接信息并訪問Lindorm寬表引擎。
/* -------------- 基于JDBC的訪問示例 ----------------- */ String tableName = "sql_table_" + new Random().nextInt(1000); // 創(chuàng)建表 try (Connection connection = dataSource.getConnection()) { 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); } } // 插入數(shù)據(jù) try (Connection connection = dataSource.getConnection()) { String sql = "upsert into " + tableName + "(id,name) values(?,?)"; try (PreparedStatement ps = connection.prepareStatement(sql)) { ps.setString(1, "aa"); ps.setString(2, "bb"); int ret = ps.executeUpdate(); System.out.println(ret); } } // 查詢數(shù)據(jù) try (Connection connection = dataSource.getConnection()) { String sql = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(sql)) { ps.setString(1, "aa"); 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); } } } // 刪除數(shù)據(jù) try (Connection connection = dataSource.getConnection()) { String sql = "delete from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(sql)) { ps.setString(1, "aa"); ps.executeUpdate(); } }
文檔內(nèi)容是否對您有幫助?