1.定义地址,访问id、密码、实例名、表名、主键名。(注意ots只能通过主键名进行查询)
private static String endPoint = "http://jxwz-ots.cn-******.ots.yun.zj";//地址 private static String accessKeyId = "******";//id private static String accessKeySecret = "******";//密码 private static String instanceName = "j*******s";//实例名 private static String table = "s*******t";//表名 private static String PRIMARY_KEY_NAME = "c*******j";//主键名
2.获取连接
SyncClient client = new SyncClient(endPoint, accessKeyId, accessKeySecret, instanceName);
3.获取表中数据,官网有很多例子,本次使用的是范围查询
RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria(table); // 设置起始主键 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(con1)); rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build()); // 设置结束主键 primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME, PrimaryKeyValue.fromString(con2)); rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build()); rangeRowQueryCriteria.setMaxVersions(1); while (true) { GetRangeRequest getRangeRequest = new GetRangeRequest(rangeRowQueryCriteria); GetRangeResponse getRangeResponse = client.getRange(getRangeRequest); for (Row row : getRangeResponse.getRows()) { Column[] columns = row.getColumns(); for(Column column:columns){//填写业务逻辑 if("i_url".equals(column.getName())){ String url = column.getValue().toString(); } } } // 若nextStartPrimaryKey不为null, 则继续读取. if (getRangeResponse.getNextStartPrimaryKey() != null) { rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey()); } else { break; } }
4.踩坑经历
提示和com.google.protobuf冲突:报错UnsupportedOperationException: This is supposed to be overridden by subclasses.官网给的解决方案是在maven中加<classifier>jar-with-dependencies</classifier>
此方法貌似解决了问题因为用main方法测试通过,但放入项目中后,启动项目后依然报此错误,本人使用的是tablestore4.2.3。最后经过一系列的验证,把原来项目中的protobuf版本改成和tablestore中自带的版本一致后,问题解决。