如何在db.execSql中加速sqlite android中的查询

时间:2014-09-23 16:07:13

标签: java android sql sqlite

我使用以下代码在数据库中输入数据。

public static void execSql(SQLiteDatabase db, String sql)
{
    String[] parts = sql.split(";");
    for (String entry : parts) {
        db.execSQL(entry);
    }   
}

最初所有" INSERT ......"在sql字符串中,然后执行每个插入循环。总插入数为22908.数据输入大约4分钟,我认为这是很长一段时间。数据为7,95 MB。有没有办法加快引进速度并将其推迟几秒钟?

INSERT INTO location ( 'latitude' , 'updated' , 'id' , 'longitude' , 'created' ) VALUES( '213.2000000' , '2014-08-25 11:07:42+00:00' , '1' , '321.0000000' , '2014-08-25 11:07:42+00:00' );
INSERT INTO location ( 'latitude' , 'updated' , 'id' , 'longitude' , 'created' ) VALUES( '42.7191000' , '2014-09-17 12:53:49+00:00' , '2' , '23.0834000' , '2014-09-17 12:53:49+00:00' );
......................

以下是数据sql变量。

2 个答案:

答案 0 :(得分:1)

在交易中包装作品:

db.beginTransaction();

try {
  // your SQL goes here
  db.setTransactionSuccessful();
}
finally {
  db.endTransaction();
}

现在,您正在为每个SQL语句执行一个事务,这非常慢。每个事务都涉及磁盘I / O,并且执行一个较大批量的磁盘I / O比成千上万个小磁盘I / O更有效。

使用预准备语句也会逐步提供帮助。

答案 1 :(得分:0)

您只使用不同的参数值执行相同的查询。这就是为什么你可以利用预编译的sql语句。您可以创建PreparedStatement的对象,然后可以使用该对象多次有效地执行insert语句。