Flash 在SQLite in AIR 3.6项目中,是否可以在一次查询中向数据库添加500多行数据?
我正在用Flash(AIR 3.6)创建iPad应用程序。 我需要使用SQLite数据库引擎同步成吨的数据。 我正在从服务器接收JSON格式的数据,需要将其转换为数据向量 据我所知,FlashSQLite引擎一次只允许一个插入过程,所以我决定在一个查询中添加尽可能多的内容。 我正在使用UNIONALL和INSERT,但我遇到了500个联合的限制,之后SQLite引擎拒绝合作 正因为如此,我必须创建一个结构,该结构将多达500个带有联合的插入操作相加,并运行,直到所有数据都以这种方式插入为止。对于2k+行,它循环大约5次。 我试图一个接一个地插入数据,但它花费的时间是现在的300倍 最后: 在SQLite in AIR 3.6项目中,是否可以在一次查询中向数据库添加500多行数据 编辑: 在一个事务中使用多个INSERT似乎不起作用:Flash 在SQLite in AIR 3.6项目中,是否可以在一次查询中向数据库添加500多行数据?,flash,sqlite,air,insert,Flash,Sqlite,Air,Insert,我正在用Flash(AIR 3.6)创建iPad应用程序。 我需要使用SQLite数据库引擎同步成吨的数据。 我正在从服务器接收JSON格式的数据,需要将其转换为数据向量 据我所知,FlashSQLite引擎一次只允许一个插入过程,所以我决定在一个查询中添加尽可能多的内容。 我正在使用UNIONALL和INSERT,但我遇到了500个联合的限制,之后SQLite引擎拒绝合作 正因为如此,我必须创建一个结构,该结构将多达500个带有联合的插入操作相加,并运行,直到所有数据都以这种方式插入为止。对于
var sql:String = "";
sql += "INSERT INTO TablicaTestowa (formTypeId,name,timestamp) VALUES ('abc2','nazwa2','sg535');"
sql += "INSERT INTO TablicaTestowa (formTypeId,name,timestamp) VALUES ('abc3','nazwa3','gwt5htbsd');"
sql += "INSERT INTO TablicaTestowa (formTypeId,name,timestamp) VALUES ('abc4','nazwa4','frtgwh3jwdsed');"
createStmt.text = sql;
createStmt.addEventListener(SQLEvent.RESULT, createResult2);
createStmt.addEventListener(SQLErrorEvent.ERROR, createError2);
createStmt.execute();
仅添加第一个值('abc2','nazwa2','sg535)。或者可能是我做错了什么?您不需要使用单一的
INSERT
查询;您可以将多个插入到一个事务中以获得类似的性能。当然可以
public void putAll(Context context, LinkedList<HANDLEDOBJECT> objects) {
if (objects.size() < 1 || objects.get(0) == null)
return;
Log.i("Database", "Starting to insert objects to " + getTableName());
List<String> insertCommands = new ArrayList<String>();
int t = 0;
while (t < objects.size()) {
int k = 0;
StringBuilder sb = new StringBuilder();
sb.append("INSERT OR REPLACE INTO ").append(getTableName())
.append("('k', 'v') ");
for (t = t + 0; t < objects.size() && k < 450; t++) {
k++;
if (t % 450 != 0)
sb.append("UNION ");
sb.append("SELECT " + objects.get(t).getId())
.append(" AS k, ")
.append("'"
+ GsonSerializer.getInstance().toJson(
objects.get(t), getHandledObjectType())
+ "'").append(" AS v ");
}
insertCommands.add(sb.toString());
}
for (String insertCommand : insertCommands)
SQLiteClient.getConnetion(context).execSQL(insertCommand);
Log.i("Database", "Successfully inserted " + t + " objects to "
+ getTableName() + "!!!");
}
public void putAll(上下文、LinkedList对象){
if(objects.size()<1 | | objects.get(0)==null)
返回;
Log.i(“数据库”,“开始向”+getTableName()插入对象”);
List insertCommands=new ArrayList();
int t=0;
而(t
不,我不能。只有第一次插入有效。其他人似乎被忽视了。