gpt4 book ai didi

java - SQLiteDatabase rawQuery() 中的 StringIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-02 06:27:21 24 4
gpt4 key购买 nike

我无法解决这个异常。我是否遗漏了一些明显的东西?

堆栈跟踪

12-05 20:07:43.129: E/AndroidRuntime(4154): FATAL EXCEPTION: Thread-1470
12-05 20:07:43.129: E/AndroidRuntime(4154): java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=6
12-05 20:07:43.129: E/AndroidRuntime(4154): at java.lang.String.startEndAndLength(String.java:593)
12-05 20:07:43.129: E/AndroidRuntime(4154): at java.lang.String.substring(String.java:1474)
12-05 20:07:43.129: E/AndroidRuntime(4154): at net.sqlcipher.database.SQLiteProgram.<init>(SQLiteProgram.java:69)
12-05 20:07:43.129: E/AndroidRuntime(4154): at net.sqlcipher.database.SQLiteQuery.<init>(SQLiteQuery.java:49)
12-05 20:07:43.129: E/AndroidRuntime(4154): at net.sqlcipher.database.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
12-05 20:07:43.129: E/AndroidRuntime(4154): at net.sqlcipher.database.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1420)
12-05 20:07:43.129: E/AndroidRuntime(4154): at net.sqlcipher.database.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1389)
<小时/>

使用的查询

查询= SELECT column1,max(datetime(creation_timestamp)) FROM table_name where dfs_id=?按列2分组

(column1、column2、table_name 等是占位符 - 不是实际名称)

参数已通过 = "a08eff29ee6a71dd_1381146091100_0002"

<小时/>

注意:我正在使用 SQLCipher(SQLCipher 的包装器),它应该与此异常无关。

最佳答案

code导致 StringIndexOutOfBoundsException 的原因如下。

/* package */ SQLiteProgram(SQLiteDatabase db, String sql) {
mDatabase = db;
mSql = sql.trim();
db.acquireReference();
db.addSQLiteClosable(this);
this.nHandle = db.mNativeHandle;

// only cache CRUD statements
String prefixSql = mSql.substring(0, 6); // <<<< HERE

获得该异常的唯一原因是 String 少于 6 个字符。 (您的是 length=0; 即上面几行 trim() 之后为空)

没有指示您在何处或如何准确地在其中放置空字符串。它来自SQLiteDatabase.rawQuery,但也可以从其他查询方法调用。进一步查看堆栈跟踪并查看您的代码,其中可能将空字符串传递给查询方法。

<小时/>

您的查询似乎也破坏了 where 子句的语法:如果有 AND 则必须是

WHERE {condition} AND {another condition expected here} GROUP BY ...

您要么忘记添加另一个 expression或者你的 AND 太多了。

并且table是保留关键字。要使用它们作为名称,您必须引用它们。 SQLite supports引号 (")、反引号 (`) 和方括号 ([])。

关于java - SQLiteDatabase rawQuery() 中的 StringIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com