spring对接InfluxDB(三)--数据获取之多条语句

Influx提供多条语句的同时查询(Multiple queries):

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west';SELECT count(\"value\") FROM \"cpu_load_short\" WHERE \"region\"='us-west'"

就是说我一次请求可以同时执行多条sql,官网明确说明只要每个sql中间用分号(;)隔开就好。
获取信息的代码:

public void getTest(){
        RestTemplate restTemplate=new RestTemplate();

        String url="http://localhost:8086/query?pretty=true&q=select * from pkk;select count(*) from pkk&db=mydb";

        String points=restTemplate.getForObject(url,String.class);

        System.out.println("points:"+points);
    }

返回的信息:

points:{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "pkk",
                    "columns": [
                        "time",
                        "address",
                        "age",
                        "name"
                    ],
                    "values": [
                        [
                            "2017-07-28T01:32:03.378554614Z",
                            "shanghai",
                            21,
                            "pangkun1"
                        ],
                        [
                            "2017-07-28T01:32:03.378554614Z",
                            "shanghai",
                            23,
                            "pangkun3"
                        ],
                        [
                            "2017-07-28T01:32:03.378554614Z",
                            "shanghai",
                            22,
                            "pangkun2"
                        ]
                    ]
                }
            ]
        }
    ]
}

这里可以看出上边返回的只有第一条查询语句的结果,第二条根本就没有执行,或者执行后根本就没返回。

同样的sql在InfluxDB的web端可以正常返回数据,但是放到代码中就是查询不出结果。

所以我判断问题应该是出在两条sql的连接处–分号,仔细查看curl中的url是说要encode的,现在看下web端执行成功的url:

http://localhost:8086/query?q=select+*+from+pkk%3Bselect+count(*)+from+pkk&db=mydb

通过抓包,或者直接在浏览器中执行我代码中的URL:

http://localhost:8086/query?pretty=true&q=select%20*%20from%20pkk;select%20count(*)%20from%20pkk&db=mydb

仔细对比可以发现自己执行的url中的分号(;)并没有没加密处理,在网上搜索可以看到其对应的编码为%3B。

所以,现在的问题是sping的resttemplate没有对分号进行处理。解决方案&

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值