SQLite 限制是一个字符串
SQLite limit is a string
Android API docs 似乎表明查询 SQLite 数据库时提供的限制子句是一个字符串。
这对我来说意义不大。
估计是内部转成整数了吧?
还是这里涉及到其他问题?
我认为他们要考虑的关键是该参数不仅适用于单个第一部分(请参阅下面的 expr1),而且适用于整个 LIMIT
子句 .
这个子句可以简单到一个整数,也可以比较复杂; LIMIT
子句的完整语法是:-
LIMIT expr1 OFFSET (or ,) expr2;
see - SELECT
其中:-
- expr1 应解析为指定要返回的最大行数的整数,并且
- expr2 是一个整数,它指定从要返回的潜在行开始的偏移量(其中 1 是第一个)。
至少在理论上,任何一个表达式都可以是子查询,例如
String limit_clause = "(SELECT numbertoshow FROM types WHERE id = (random() & 1)+1)";
- P.S。并不是说这是一个有用的示例,而是一个有效的示例,用于说明复杂的 LIMIT 子句,并且作为一个示例说明为什么 String 而不是 Integer 是更多 flexible/useful 参数类型。
用于测试以上内容的完整 SQL 是:-
/*
DROP TABLE IF EXISTS basetable;
CREATE TABLE IF NOT EXISTS basetable (basename TEXT);
INSERT INTO basetable VALUES('test001');
INSERT INTO basetable VALUES('test002');
INSERT INTO basetable VALUES('test003');
INSERT INTO basetable VALUES('test004');
INSERT INTO basetable VALUES('test005');
INSERT INTO basetable VALUES('test006');
INSERT INTO basetable VALUES('test007');
INSERT INTO basetable VALUES('test008');
INSERT INTO basetable VALUES('test009');
INSERT INTO basetable VALUES('test010');
INSERT INTO basetable VALUES('test011');
INSERT INTO basetable VALUES('test012');
DROP TABLE IF EXISTS types;
CREATE TABLE IF NOT EXISTS types (id INTEGER PRIMARY KEY, typename TEXT, numbertoshow INTEGER);
INSERT INTO types VALUES(null,'type001',3);
INSERT INTO types VALUES(null,'type002',4);
*/
SELECT * FROM basetable LIMIT (SELECT numbertoshow FROM types WHERE id = (random() & 1)+1);
- 注意注释掉的语句被注释掉,因为它们只需要一次。
Android API docs 似乎表明查询 SQLite 数据库时提供的限制子句是一个字符串。
这对我来说意义不大。
估计是内部转成整数了吧?
还是这里涉及到其他问题?
我认为他们要考虑的关键是该参数不仅适用于单个第一部分(请参阅下面的 expr1),而且适用于整个 LIMIT
子句 .
这个子句可以简单到一个整数,也可以比较复杂; LIMIT
子句的完整语法是:-
LIMIT expr1 OFFSET (or ,) expr2;
see - SELECT
其中:-
- expr1 应解析为指定要返回的最大行数的整数,并且
- expr2 是一个整数,它指定从要返回的潜在行开始的偏移量(其中 1 是第一个)。
至少在理论上,任何一个表达式都可以是子查询,例如
String limit_clause = "(SELECT numbertoshow FROM types WHERE id = (random() & 1)+1)";
- P.S。并不是说这是一个有用的示例,而是一个有效的示例,用于说明复杂的 LIMIT 子句,并且作为一个示例说明为什么 String 而不是 Integer 是更多 flexible/useful 参数类型。
用于测试以上内容的完整 SQL 是:-
/*
DROP TABLE IF EXISTS basetable;
CREATE TABLE IF NOT EXISTS basetable (basename TEXT);
INSERT INTO basetable VALUES('test001');
INSERT INTO basetable VALUES('test002');
INSERT INTO basetable VALUES('test003');
INSERT INTO basetable VALUES('test004');
INSERT INTO basetable VALUES('test005');
INSERT INTO basetable VALUES('test006');
INSERT INTO basetable VALUES('test007');
INSERT INTO basetable VALUES('test008');
INSERT INTO basetable VALUES('test009');
INSERT INTO basetable VALUES('test010');
INSERT INTO basetable VALUES('test011');
INSERT INTO basetable VALUES('test012');
DROP TABLE IF EXISTS types;
CREATE TABLE IF NOT EXISTS types (id INTEGER PRIMARY KEY, typename TEXT, numbertoshow INTEGER);
INSERT INTO types VALUES(null,'type001',3);
INSERT INTO types VALUES(null,'type002',4);
*/
SELECT * FROM basetable LIMIT (SELECT numbertoshow FROM types WHERE id = (random() & 1)+1);
- 注意注释掉的语句被注释掉,因为它们只需要一次。