cratedb rest insert object

先定义一个数据表:html

create table my_table (
name string,
mxlist array (object as(name string, age integer))
);java

这样就新建了一个表,结构是这样的:sql

能够看到mxlist中有2个对象,关于object和array的创建,官网有很详细的说明json

接下来执行对my_table的CRUD操做,cratedb有基于各类语言的client端,我这里使用的是java,不过我选择的是rest方式,由于java的client端代码版本号过低,一直没有更新,用rest的话更加自由,rest官方文档:https://crate.io/docs/reference/protocols/http.htmlpost

java代码:url

JSONObject o = new JSONObject();
        o.put("name", "jemmy");
        o.put("age", 67);
        JSONArray arr = new JSONArray();
        HTTPAliveCRUDClient client = HTTPAliveCRUDClient.getInstance("192.168.13.50", 4200);//这是本身封装的方法
        client.connect();
//        String sql = "SELECT * FROM my_table";
        String sql = "INSERT INTO my_table(name,mxlist) VALUES (?,?)";
        JSONObject json = new JSONObject();
        json.put("stmt", sql);
        String arg = "凯文";
        JSONArray d = new JSONArray();
        d.add(arg);
        JSONArray b = new JSONArray();
        b.add(o);
        d.add(b);
        json.put("args", d);
        String url = "http://192.168.13.50" + ":" + "4200/_sql?pretty";
        System.out.println(url);
        System.out.println(json);
        try {
            HTTPResp resp = client.post(url, json);
            if (resp == null || resp.getRespCode(-1) != 200) {
                int errorCode = resp.getRespJson().getJSONObject("error").getIntValue("code");
                String errorMsg = resp.getRespJson().getJSONObject("error").getString("message");
                logger.error(" ----- execute failed :" + resp.getRespMsg());
            } else {
                logger.info(" ----- execute success");
            }
            System.out.println(resp.getRespJson());
        }catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);
        }

这样就OK了rest

相关文章
相关标签/搜索