[Java SDK]查询表结构

1. 接口说明

从指定的表格读取表结构数据。

2. 版本要求

无特殊要求,所有版本都提供了该接口。

3. 准备工作

参见准备工作文档,完成使用该接口前的准备工作,并创建TDR表

准备工作完成后,将会获得以下信息,这些信息在使用SDK时会被用到:

  1. 目录服务器地址列表
  2. 业务ID
  3. 业务访问密码
  4. 游戏区ID
  5. 数据表名

4. 示例代码

示例代码的基本执行过程:

  1. 创建客户端;
  2. 构建请求;
  3. 发送请求;
  4. 处理响应;
  5. 销毁客户端。

4.1. 同步调用示例代码

import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tcaplus.util.TdrType;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;

import java.util.ArrayList;
import java.util.List;

public class Example {

    public static void main(String[] arguments) {
        // 1. 准备环境信息
        // 1.1. 目录服务地址列表
        List<String> dirList = new ArrayList<String>();
        dirList.add("tcp://x.x.x.x:9999");
        dirList.add("tcp://y.y.y.y:9999");
        // 1.2. 业务ID
        int appId = 1;
        // 1.3. 业务密码
        String appPassword = "****************";
        // 1.4. 表格组ID
        int tableGroupId = 1;
        // 1.5. 表格名称
        String tableName = "test";

        // 2. 创建客户端
        Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
        try {
            // 3. 构造查询数据的请求
            // 3.1. 获取请求对象。为了提升SDK性能,Request对象是复用的
            Request request = client.acquireRequest();
            // 3.2. 设置请求类型和目标表名。
            req.setCmd(TcaplusProtocolCsConstants.TCAPLUS_CMD_METADATA_GET_REQ);
            request.setTableName(tableName);

            // 4. 发送请求,并获取结果
            Response response = client.poll(request);

            // 5. 处理结果
            if (response.getResult() == 0) {
                // 获取表结构成功
                ResponseLite rspLite = (ResponseLite) response;
                TableMetadata meta = rspLite.getMetadata();
                //获取表字段
                List<TableMetadata.KeyColumn> keyColumnList = meta.keyColumnList;
                //表字段类型
                for (TableMetadata.KeyColumn keyColumn:keyColumnList) {
                    int type = keyColumn.type;
                    switch (type) {
                        case TdrType.TCAPLUS_RECORD_TYPE_BINARY:
                            //
                            break;
                        case TdrType.TCAPLUS_RECORD_TYPE_DOUBLE:
                            //
                            break;
                        default:
                            //
                            break;
                    }
                }
            } else {
                // 获取表结构失败,可能是表不存在
            }
        } finally {
            // 6. 销毁客户端对象
            ClientFactory.destroyClient(client);
        }
    }

}

4.2. 异步调用示例代码

import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tcaplus.util.TdrType;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;

import java.util.ArrayList;
import java.util.List;

public class Example {

    public static void main(String[] arguments) {
        // 1. 准备环境信息
        // 1.1. 目录服务地址列表
        List<String> dirList = new ArrayList<String>();
        dirList.add("tcp://x.x.x.x:9999");
        dirList.add("tcp://y.y.y.y:9999");
        // 1.2. 业务ID
        int appId = 1;
        // 1.3. 业务密码
        String appPassword = "****************";
        // 1.4. 表格组ID
        int tableGroupId = 1;
        // 1.5. 表格名称
        String tableName = "test";

        // 2. 创建客户端
        Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
        try {
            // 3. 构造查询数据的请求
            // 3.1. 获取请求对象。为了提升SDK性能,Request对象是复用的
            Request request = client.acquireRequest();
            // 3.2. 设置请求类型和目标表名。
            req.setCmd(TcaplusProtocolCsConstants.TCAPLUS_CMD_METADATA_GET_REQ);
            request.setTableName(tableName);

            CountDownLatch latch = new CountDownLatch(1);

            // 4. 异步发送请求,并指定返回结果处理器,post方法会立即返回
            client.post(request, new Future() {

                @Override
                public void onResponse(Response response) {
                    // 5. 处理结果
                    if (response.getResult() == 0) {
                        // 获取表结构成功
                        ResponseLite rspLite = (ResponseLite) response;
                        TableMetadata meta = rspLite.getMetadata();
                        //获取表字段
                        List<TableMetadata.KeyColumn> keyColumnList = meta.keyColumnList;
                        //表字段类型
                        for (TableMetadata.KeyColumn keyColumn:keyColumnList) {
                            int type = keyColumn.type;
                            switch (type) {
                                case TdrType.TCAPLUS_RECORD_TYPE_BINARY:
                                    //
                                    break;
                                case TdrType.TCAPLUS_RECORD_TYPE_DOUBLE:
                                    //
                                    break;
                                default:
                                    //
                                    break;
                            }
                        }
                    } else {
                        // 获取表结构失败,可能是表不存在
                    }
                }
            });

            latch.await();

        } finally {
            // 6. 销毁客户端对象
            ClientFactory.destroyClient(client);
        }
    }

}

5. 请求对象中的方法说明

注:如有未列出来的Request对象方法,即表示该方法在读取数据的场景下是无效的。

方法签名 方法说明
void setCmd(int cmd) 设置请求类型(指令)。cmd:请求类型,固定为TcaplusProtocolCsConstants.TCAPLUS_CMD_METADATA_GET_REQ
void setTableName(String tableName) 设置目标表名。tableName:目标表名,不能为null。

6. 响应对象中的方法说明

注:如有未列出来的Response对象方法,即表示该方法在查询数据的场景下是无效的。

方法签名 方法说明
int getResult() 获取读取数据请求的响应码。0表示操作成功。非0表示操作异常,参见响应码含义说明

7. ResponseLite对象方法说明

注:如有未列出来的ResponseLite对象方法,即表示该方法在查询数据的场景下是无效的。

方法签名 方法说明
TableMetadata getMetadata() 获取表格的meta结构。非null表示操作成功,null表示操作异常。

8. TableMetadata对象说明

注:如有未列出来的TableMetadata对象方法,即表示该方法在查询数据的场景下是无效的。

成员变量 成员变量说明
type 表格类型,目前支持TCAPLUS_TABLE_TYPE_GENERIC和TCAPLUS_TABLE_TYPE_LIST两种。
listMaxElementNum List中一个Key支持的最多元素个数。
keyColumnList Key字段元数据信息。
valueColumnList Value字段元数据信息。

9. TableMetadata.KeyColumn对象说明

注:如有未列出来的TableMetadata.KeyColumn对象方法,即表示该方法在查询数据的场景下是无效的。

成员变量 成员变量说明
type 字段类型。
name 字段名称。

10. TableMetadata.ValueColumn对象说明

注:如有未列出来的TableMetadata.ValueColumn对象方法,即表示该方法在查询数据的场景下是无效的。

成员变量 成员变量说明
type 字段类型。
name 字段名称。

11. 常见问题

详见错误码含义和处理方法

12. 其它参考文档

results matching ""

    No results matching ""