首页 > 解决方案 > 在准备好的查询中,什么会导致“java.lang.IndexOutOfBoundsException:索引:1,大小:1”?

问题描述

这是在 Cassandra 3.11.4 中。

我正在运行以前在我的应用程序中运行良好的查询的修改版本。原来的查询很好:

SELECT SerializedRecord FROM SxRecord WHERE Mark=?

我修改了查询以具有一个时间戳范围(我还为其添加了一个索引,尽管我认为这不相关):

SELECT SerializedRecord FROM SxRecord WHERE Mark=? AND Timestamp>=? AND Timestamp<=?

这导致:

 ResponseError {reHost = datacenter1:rack1:127.0.0.1:9042, reTrace = Nothing, reWarn = [], reCause = ServerError "java.lang.IndexOutOfBoundsException: Index: 1, Size: 1"}

发生这种情况时,我看不到正在登录的查询 CQL system_traces.sessions,这很有趣,因为如果我将语法错误放入查询中,它仍然会记录在那里。

此外,当我在 cqlsh 中运行(据我所知,相同的,直到时间戳)查询时,似乎没有问题:

cqlsh> SELECT SerializedRecord FROM test_fds.SxRecord WHERE Mark=8391 AND Timestamp >= '2021-03-06 00:00:00.000+0000' AND Timestamp <= '2021-03-09 00:00:00.000+0000';

 serializedrecord
------------------

这将导致以下查询跟踪:

cqlsh> select parameters from system_traces.sessions;

 parameters
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {'consistency_level': 'ONE', 'page_size': '100', 'query': 'SELECT SerializedRecord FROM test_fds.SxRecord WHERE Mark=8391 AND Timestamp >= ''2021-03-06 00:00:00.000+0000'' AND Timestamp <= ''2021-03-09 00:00:00.000+0000'';', 'serial_consistency_level': 'SERIAL'}
                                                                                                                                                                                                                                                                   null

标签: cassandracassandra-3.0

解决方案


似乎在准备好的/绑定语句中执行的查询没有收到所有需要的参数或太多(以前代码中绑定的东西)

您没有看到跟踪的查询的事实来自驱动程序甚至不执行查询,因为它具有未绑定的参数


推荐阅读