本文介绍通过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参考。