sqlite查询大小有限制吗?

时间:2014-07-01 12:48:20

标签: android sql sqlite

选择陈述的大小是否有限制? 例如,假设我有100名失败的学生作为选择,我的下面的代码会起作用吗?

ArrayList<Long> ids_toupdate = getFailedStudents();// has size 100.
String selection = String.format(Locale.US, STUDENT._ID + " IN (%s)",TextUtils.join(", ", ids_toupdate));
ContentValues cv = new ContentValues();
cv.put(RawContacts.FAILED, 1);
getContentResolver().update(STUDENT.CONTENT_URI,cv, selection, null);

2 个答案:

答案 0 :(得分:8)

粗略地说,默认限制是1,000,000字节或1,000,000个字符,因此,除非您的“学生”每个字符超过100,000个,否则您的声明应该没问题。

以下摘自http://www.sqlite.org/limits.html

SQL语句的最大长度

SQL语句文本中的最大字节数限制为SQLITE_MAX_SQL_LENGTH,默认为1000000.您可以将此限制重新定义为SQLITE_MAX_LENGTH和1073741824中的较小值。

如果SQL语句的长度限制为一百万字节,那么显然您将无法通过在INSERT语句中嵌入它们作为文字来插入数百万字节字符串。但无论如何你不应该这样做。为您的数据使用主机参数。准备这样的简短SQL语句:

INSERT INTO tab1 VALUES(?,?,?); 

然后使用sqlite3_bind_XXXX()函数将大字符串值绑定到SQL语句。绑定的使用避免了在字符串中转义引号字符的需要,从而降低了SQL注入攻击的风险。它也运行得更快,因为不需要解析或复制大字符串。

使用sqlite3_limit(db,SQLITE_LIMIT_SQL_LENGTH,size)接口可以在运行时降低SQL语句的最大长度。

答案 1 :(得分:0)

还有SQLITE_MAX_VARIABLE_NUMBER限制查询中的变量数量。默认值为999,但某些发行版使用更高的设置进行编译。