- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试提高我的 android 数据库插入速度。我目前正在做的是生成一个字符串,如:
SELECT ? as title, ? as musician_id, ? as album_id, ? as genre
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
然后执行它
SQLiteDatabase database = //initialized in some way
String insertQuery; // the string of the query above
String [] parameters; // the parameters to use in the insertion.
database.execSQL(insertQuery.toString(), parameters);
当我尝试插入大约 2000 行时出现以下错误:
Caused by: android.database.sqlite.SQLiteException: too many SQL variables (code 1): , while compiling: INSERT INTO songs (title, musician_id, album_id, genre)
SELECT ? as title, ? as musician_id, ? as album_id, ? as genre
UNION SELECT ?, ?, ?, ?
UNION SELECT ?, ?, ?, ?
当我尝试插入大约 200 行时,一切正常。
我想这很明显 - 我试图在单个 execSQL
中传递太多变量。有谁知道限制是什么,以便我可以将插入的行拆分为适当的批处理?
最佳答案
限制在 sqlite3.c 中硬编码并设置为 999。不幸的是,它可以更改,但只能在编译时更改。以下是相关 fragment :
/*
** The maximum value of a ?nnn wildcard that the parser will accept.
*/
#ifndef SQLITE_MAX_VARIABLE_NUMBER
# define SQLITE_MAX_VARIABLE_NUMBER 999
#endif
/*
** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater
** than 32767 we have to make it 32-bit. 16-bit is preferred because
** it uses less memory in the Expr object, which is a big memory user
** in systems with lots of prepared statements. And few applications
** need more than about 10 or 20 variables. But some extreme users want
** to have prepared statements with over 32767 variables, and for them
** the option is available (at compile-time).
*/
#if SQLITE_MAX_VARIABLE_NUMBER<=32767
typedef i16 ynVar;
#else
typedef int ynVar;
#endif
关于android - 在单个 execSQL 查询中可以指定的 SQL 变量的限制是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312590/
我正在尝试在 Android SQLite 数据库中创建一个表。但是 execSQLite 方法在 on create 方法中不起作用。它给了我信息- Non-static method 'execS
我编写了一个调度程序应用程序,当用户使用以下命令从互联网更新日程安排时,它会将日程安排数据添加到数据库中: sqLiteDatabase.execSQL("INSERT OR IGNORE INTO
我的 execSQL() 命令出现错误。 Eclipse 说我需要在我的 DBHelper 类中定义它。我该怎么做呢?我不熟悉使用 SQL 数据库及其命令。 这是我的类(class)代码; packa
我有以下 execSQL 抛出语法错误并导致我的应用程序崩溃。考虑到我已经转义了单引号和双引号,我不知道为什么。 代码如下: database.execSQL("insert into " + TAB
好吧,也许我只是不明白这一点,但是,当我尝试删除多个表时,比如 static final String DROP_TABLES = "DROP TABLE IF EXISTS ?,?,?,?"; 并尝
您好,我有这个函数可以使用 TUniQuery 更新我的 Access DB: var Res:Boolean; begin Res:=false; try with MyQuery do
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我正在尝试获取从 EditText 字段存储的一些值并将它们存储到我的 SQLLite 数据库中。 我有以下字符串变量: 网站名称_地址_用户_pass 这是我尝试使用的 Sql 命令: SQLite
我正在尝试使用 rawQuery 和 execSQL 方法来操作我的数据库,而不是 .update、.insert 等。我正在尝试使用以下代码执行更新: db.execSQL("UPDATE conf
我正在为Android 3.2版本编写应用程序,然后要求升级的ASUS Eee Pad TF01,这将Android版本更改为4.0.3。从那时起我就遇到了应用程序的问题,我将其追踪到 SQLite
为什么这不起作用?? db.execSQL("INSERT INTO PARTIES (PARTY_NAME, PARTY_COUNT) SELECT DISTINCT(PARTY), COUNT(P
我正在尝试制作使用SQLite数据库的简单注册/登录应用程序,到目前为止我得到了这段代码。这是我的“注册” Activity ,我猜它应该在按下注册按钮后将用户名和 pin(密码)实现到数据库,遗憾的
我在这里看到了很多类似的问题,但没有一个能解决我的问题。我正在制作一个将 XML 内容放入数据库的应用程序。一切工作正常,但是当我第二次打开应用程序时,会添加越来越多的值。我试图删除表,删除数据库,甚
我有这行代码: String insertSQL = "INSERT INTO " + BOOK_NAME + " (id, title, date, type, excerpt, c
这个问题在这里已经有了答案: Unfortunately MyApp has stopped. How can I solve this? (23 个回答) 关闭 7 年前。 这是我的 onCrea
我想有一个选项来调用“rawQuery”并传入一个整数列表,但看起来我不能:所有“rawQuery”方法都需要字符串数组... 为什么?我可以为每个传递的 int 对象调用“toString”,但我在
我按照标准教程使用 Android 构建数据库。我创建了一个名为 DbHelper 的类,它扩展了 SQLiteOpenHelper。我已经重写了创建处理程序来执行一个字符串。 @Override p
系统/版本信息: Windows Server 2019 数据中心 Ubuntu 16.04 Python 2.7 pip 20.1 我正在尝试使用以下命令安装最新版本的 execsql (1.72)
在 Delphi 中,每当我使用 TQuery 对数据库执行 SELECT 时,我都会在 Query.Open 后面加上 try..finally,并在finally 部分中使用 Query.Clos
我们如何获得受 FDQuery.ExecSQL 影响的计数对 SQLITE 数据库的 table1 执行 INSERT、UPDATE 或 DELETE 命令后 FireDAC 命令? FDQuery.
我是一名优秀的程序员,十分优秀!