本文介绍通过Lindorm宽表SQL Java API连接宽表引擎的操作和使用示例。

前提条件

已获取Lindorm实例的连接地址,具体操作,请参见访问实例

下载Lindorm客户端

以下代码是通过Maven依赖下载Lindorm客户端。

<dependency> 
  <groupId>com.aliyun.lindorm</groupId>  
  <artifactId>lindorm-all-client</artifactId>
  <version>2.0.4</version>
</dependency>

初始化Lindorm客户端

String LINDORM_JDBC_URL =  "控制台获取的Lindorm宽表SQL地址";
String LINDORM_USER = "user";
String LINDORM_PASSWORD = "password";
String USER_NAME = "Lindorm控制台获取的数据库用户名";
String PASSWORD = "Lindorm控制台获取的数据库密码";
Properties properties = new Properties();
properties.put(LINDORM_USER, USER_NAME);
properties.put(LINDORM_PASSWORD, PASSWORD);           

建立连接

以下代码是建立Lindorm客户端和数据之间的连接。

pconn = DriverManager.getConnection(LINDORM_JDBC_URL, properties);
说明 服务端为了提高资源利用率,在连接Lindorm客户端空闲90 s后,服务端会主动断开连接。如果此时复用该连接,会出现com.aliyun.lindorm.client.shaded.org.apache.calcite.avatica.http.ConnectionDisconnectedException报错,重新建立连接即可解决。

使用Java API访问Lindorm宽表引擎

建立连接后,可使用Lindorm宽表SQL Java API访问Lindorm宽表引擎。下面提供一些简单的Java示例。注意,默认使用的schema都是default,如果想要使用特定的schema,可以使用前use 一下schema,注意本次use 在此次链接上有效,想要切换到别的schema,需要再次执行use进行切换。

  • DDL操作
    //创建表
    String tableName = "sql_table_" + new Random().nextInt(1000);
    String sqlCreate = "create table if not exists " + tableName
            + "(id VARCHAR, name VARCHAR, primary key(id))";
    
     Statement statement = pconn.createStatement();
    //如果不指定schema默认是"default",可以使用statement.execute("use schema名字"); 进行切换schema。
     int retCreate = statement.executeUpdate(sqlCreate);      
     
     //删除表
     String sqlDelete = "drop table " + tableName;
     Statement deletestatement = pconn.createStatement();
     int retDel = statementdelete.executeUpdate(sqlDelete);
  • DML操作
    //使用PrepareStatement进行数据的插入,需要指定好对应的Primary Key
    StringBuilder sqlBuilder = new StringBuilder();
    sqlBuilder.append("upsert into " + tableName + "(id,name) values(?,?)");
    String sqlUp = sqlBuilder.toString();
    
    PreparedStatement psUp = pconn.prepareStatement(sqlUp);
    psUp.setString(1, "aa");
    psUp.setString(2, "bb");
    int retupdate = psUp.executeUpdate();
    
    //使用Sql进行数据的读取Select操作
    String sqlSelect = "select * from " + tableName + " where id=?";
    PreparedStatement psSelect = null;
    psSelect = pconn.prepareStatement(sqlSelect);
    psSelect.setString(1, "aa");
    ResultSet rs = psSelect.executeQuery();
    while (rs.next()) {
        String id = rs.getString(1);
        String name = rs.getString(2);
    }
    
    //删除数据
    String sqlDeleteRow = "delete from " + tableName + " where id=?";
    PreparedStatement psDeleteRow = pconn.prepareStatement(sqlDeleteRow);
    psDeleteRow.setString(1, "aa");
    psDeleteRow.executeUpdate();

语法参考

关于Lindorm宽表SQL的语法使用请参见Lindorm宽表SQL语法手册