我无法解决这个异常。我是否遗漏了一些明显的东西?
堆栈跟踪
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/