anroid Sqlite批量插入数据优化方法

SQLite的数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度。
例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行 
sqlite3_exec(db, “insert into name values ‘lxkxf', ‘24'; ”, 0, 0, &zErrMsg); 
将会重复的打开关闭数据库文件100万次,所以速度当然会很慢。因此对于这种情况我们应该使用“事务”。 
具体方法如下:在执行SQL语句之前和SQL语句执行完毕之后加上 
rc = sqlite3_exec(db, "BEGIN;", 0, 0, &zErrMsg); 
//执行SQL语句 
rc = sqlite3_exec(db, "COMMIT;", 0, 0, &zErrMsg);
这样SQLite将把全部要执行的SQL语句先缓存在内存当中,然后等到COMMIT的时候一次性的写入数据库,这样数据库文件只被打开关闭了一次,效率自然大大的提高。有一组数据对比:
测试1: 1000 INSERTs 
CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100)); 
INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three'); 
INSERT INTO t1 VALUES(2,75560,'seventy five thousand five hundred sixty'); 
... 995 lines omitted 
INSERT INTO t1 VALUES(998,66289,'sixty six thousand two hundred eighty nine'); 
INSERT INTO t1 VALUES(999,24322,'twenty four thousand three hundred twenty two'); 
INSERT INTO t1 VALUES(1000,94142,'ninety four thousand one hundred forty two'); 
SQLite 2.7.6: 
13.061 
SQLite 2.7.6 (nosync): 
0.223

测试2: 使用事务 25000 INSERTs 
BEGIN; 
CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100)); 
INSERT INTO t2 VALUES(1,59672,'fifty nine thousand six hundred seventy two'); 
... 24997 lines omitted 
INSERT INTO t2 VALUES(24999,89569,'eighty nine thousand five hundred sixty nine'); 
INSERT INTO t2 VALUES(25000,94666,'ninety four thousand six hundred sixty six'); 
COMMIT; 
SQLite 2.7.6: 
0.914 
SQLite 2.7.6 (nosync): 
0.757

可见使用了事务之后却是极大的提高了数据库的效率。但是我们也要注意,使用事务也是有一定的开销的,所以对于数据量很小的操作可以不必使用,以免造成而外的消耗。

android中的方法,

解决方法:

添加事务处理,把5000条插入作为一个事务

dataBase.beginTransaction();        //手动设置开始事务

//数据插入操作循环

dataBase.setTransactionSuccessful();        //设置事务处理成功,不设置会自动回滚不提交

dataBase.endTransaction();        //处理完成 




PS,在android中一般是使用 ContentResolver来包装下sqlite,自带一个批量插入的方法
public final int bulkInsert (Uri url, ContentValues[] values)
Since:  API Level 1

Inserts multiple rows into a table at the given URL. This function make no guarantees about the atomicity of the insertions.

Parameters
urlThe URL of the table to insert into.
valuesThe initial values for the newly inserted rows. The key is the column name for the field. Passing null will create an empty row.
Returns
  • the number of newly created rows. 
### 回答1: Android SQLiteStudio是一个Android平台上的数据库管理工具,主要用于管理和操作SQLite数据库。 首先,SQLite是一个轻型的数据库引擎,它被广泛应用于Android平台上的应用程序开发。而SQLiteStudio则是一个用于管理SQLite数据库的可视化工具。通过SQLiteStudio,开发者可以方便地创建、修改和维护数据库表结构以及数据记录。 在Android应用开发过程中,使用SQLiteStudio可以帮助开发者更好地管理应用程序的数据库。例如,开发者可以通过SQLiteStudio创建数据库表,定义表的字段以及字段的数据类型。创建完毕后,开发者可以使用SQLiteStudio插入、更新和删除数据记录,还可以执行查询操作以检索数据库中的数据。 另外,SQLiteStudio也提供了一些高级功能,如索引、触发器和视图的管理。通过这些功能,开发者可以优化数据库的性能和查询效率,提高应用程序的响应速度和用户体验。 总之,Android SQLiteStudio是Android平台上的一款实用工具,它可以帮助开发者更好地管理和操作SQLite数据库。通过SQLiteStudio,开发者可以轻松创建、修改和维护数据库表结构以及数据记录,同时还可以使用高级功能优化数据库性能。 ### 回答2: Android SQLiteStudio是一个用于管理和操作SQLite数据库的开源软件。它提供了一个直观的图形用户界面(GUI),使用户能够轻松地创建、编辑和删除数据库、表格和数据。 使用Android SQLiteStudio,您可以执行各种数据库操作,如创建新数据库、导入和导出数据、编辑表格和数据行等。该软件提供了一个简单而强大的用户界面,使您能够轻松地进行这些操作,而无需编写复杂的SQL语句。 此外,Android SQLiteStudio还具有数据查看和过滤功能,以帮助用户更好地理解和分析数据库中的数据。您可以轻松地浏览和搜索数据库中的数据,并使用过滤器来查找特定的数据行。 Android SQLiteStudio还提供了一个强大的查询编辑器,让用户可以编写和执行复杂的SQL查询。您可以自定义查询的条件、排序和列,并立即看到结果。该软件还提供了一些常用的查询功能,如联接、聚合和分组。 总的来说,Android SQLiteStudio是一个简单而强大的工具,用于管理和操作SQLite数据库。它提供了一个直观的用户界面,使用户能够轻松地进行各种数据库操作,如创建、编辑和删除数据库、表格和数据。它还具有数据查看和查询编辑器的功能,使用户能够更好地理解和分析数据库中的数据。 ### 回答3: Android SQLitestudio是一个功能强大的数据库管理工具,用于管理和操作SQLite数据库。它可以在Android设备上直接运行,提供了简单直观的界面和多种功能,使得开发者可以更轻松地管理和查询数据库。 首先,SQLitestudio提供了一个直观的图形界面,使得用户可以通过简单的点击和拖动操作来管理数据库。用户可以轻松地创建、编辑和删除表格、字段和索引,而不需要编写复杂的SQL语句。此外,SQLitestudio还提供了丰富的模板和向导,帮助用户快速创建数据库结构。 其次,SQLitestudio具有强大的查询功能,允许用户轻松执行各种复杂的SQL查询。用户可以使用SQL编辑器编写和调试SQL语句,然后通过查询结果窗口查看查询结果。此外,SQLitestudio还提供了查询构建器,帮助用户快速构建常见的查询语句,减少了错误和繁琐的工作。 此外,SQLitestudio还提供了数据导入和导出功能,用户可以将数据从其他数据库导入到SQLite数据库中,或者将SQLite数据库导出到其他格式(如CSV、JSON等)。这种灵活性和互操作性使得开发者可以更好地与其他数据库和数据源进行集成。 最后,SQLitestudio还支持批量操作和数据编辑。用户可以一次性插入、更新或删除多行数据,而不需要手动编写和执行多个SQL语句。此外,SQLitestudio还提供了直接编辑数据的功能,用户可以直接在表格中编辑和更新数据,而不需要编写和执行SQL语句。 综上所述,Android SQLitestudio是一个强大的数据库管理工具,提供了直观的界面、丰富的功能和强大的查询能力。它方便了开发者管理和操作SQLite数据库,在Android开发中起到了重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值