小编典典

sqlite查询大小有限制吗?

sql

选择语句的大小有限制吗?例如,假设我有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);

阅读 347

收藏
2021-03-17

共1个答案

小编典典

粗略地说,默认限制是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语句的最大长度。

2021-03-17