选择语句的大小有限制吗?例如,假设我有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条答案
按热度按时间x6yk4ghg1#
粗略地说,默认限制是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语句:
然后使用SQLITE3_BIND_XXXX()函数将大字符串值绑定到SQL语句。使用绑定消除了对字符串中的引号字符进行转义的需要,从而降低了SQL注入攻击的风险。它的运行速度也更快,因为不需要那么多地解析或复制大字符串。
可以在运行时使用SQLITE_LIMIT(db,SQLITE_LIMIT_SQL_LENGTH,SIZE)接口降低SQL语句的最大长度。
编辑:2022年10月26日正如托拜厄斯在他的评论中解释的那样,链接的文章现在描述的默认最大长度如下:
SQL语句的最大长度SQL语句文本的最大字节数限制为SQLITE_MAX_SQL_LENGTH,默认为1,000,000,000。
mfpqipee2#
还有SQLITE_MAX_VARIABLE_NUMBER,它限制查询中的变量数量。缺省值为999,但某些发行版使用更高的设置进行编译。