`
hold_on
  • 浏览: 455653 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android批量插入数据效率对比

阅读更多

对比在android中批量插入数据的3中方式对比(各插入1W条数据所花费的时间):

1、 一个一个插入

 

/**
	 * 向表中插入数据
	 * 
	 * @param openHelper
	 * @param appInfo
	 * @return
	 */
	public static boolean insert(SQLiteOpenHelper openHelper,
			RemoteAppInfo appInfo) {
		if (null == appInfo) {
			return true;
		}
		SQLiteDatabase db = null;
		try {
			db = openHelper.getWritableDatabase();
			ContentValues values = appInfo.getContentValues();
			return -1 != db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null,
					values);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (null != db) {
				db.close();
			}
		}
		return false;
	}


	for (RemoteAppInfo remoteAppInfo : list) {
					RemoteDBUtil.insert(helper, remoteAppInfo);
				}

 耗时:106524ms,也就是106s

 

 

2、 开启事务批量插入,使用

SqliteDateBase中的

insert(String table, String nullColumnHack, ContentValues values)

方法

 

 

	/**
	 * 向表中插入一串数据
	 * 
	 * @param openHelper
	 * @param appInfo
	 * @return 如果成功则返回true,否则返回flase
	 */
	public static boolean insert(SQLiteOpenHelper openHelper,
			List<RemoteAppInfo> list) {
		boolean result = true;
		if (null == list || list.size() <= 0) {
			return true;
		}
		SQLiteDatabase db = null;

		try {
			db = openHelper.getWritableDatabase();
			db.beginTransaction();
			for (RemoteAppInfo remoteAppInfo : list) {
				ContentValues values = remoteAppInfo.getContentValues();
				if (db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null, values) < 0) {
					result = false;
					break;
				}
			}
			if (result) {
				db.setTransactionSuccessful();
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			try {
				if (null != db) {
					db.endTransaction();
					db.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return true;
	}

耗时:2968ms

 

 

3、 开启事务批量插入,使用

SQLiteStatement

 

 

/**
	 * 第二种方式批量插入(插入1W条数据耗时:1365ms)
	 * @param openHelper
	 * @param list
	 * @return
	 */
	public static boolean insertBySql(SQLiteOpenHelper openHelper,
			List<RemoteAppInfo> list) {
		if (null == openHelper || null == list || list.size() <= 0) {
			return false;
		}
		SQLiteDatabase db = null;
		try {
			db = openHelper.getWritableDatabase();
			String sql = "insert into " + RemoteDBHelper.TABLE_APP_REMOTE + "("
					+ RemoteDBHelper.COL_PKG_NAME + ","// 包名
					+ RemoteDBHelper.COL_USER_ACCOUNT + ","// 账号
					+ RemoteDBHelper.COL_APP_SOURCE + ","// 来源
					+ RemoteDBHelper.COL_SOURCE_UNIQUE + ","// PC mac 地址
					+ RemoteDBHelper.COL_MOBILE_UNIQUE + ","// 手机唯一标识
					+ RemoteDBHelper.COL_IMEI + ","// 手机IMEI
					+ RemoteDBHelper.COL_INSTALL_STATUS + ","// 安装状态
					+ RemoteDBHelper.COL_TRANSFER_RESULT + ","// 传输状态
					+ RemoteDBHelper.COL_REMOTE_RECORD_ID // 唯一标识
					+ ") " + "values(?,?,?,?,?,?,?,?,?)";
			SQLiteStatement stat = db.compileStatement(sql);
			db.beginTransaction();
			for (RemoteAppInfo remoteAppInfo : list) {
				stat.bindString(1, remoteAppInfo.getPkgName());
				stat.bindString(2, remoteAppInfo.getAccount());
				stat.bindLong(3, remoteAppInfo.getFrom());
				stat.bindString(4, remoteAppInfo.getFromDeviceMd5());
				stat.bindString(5, remoteAppInfo.getMoblieMd5());
				stat.bindString(6, remoteAppInfo.getImei());
				stat.bindLong(7, remoteAppInfo.getInstallStatus());
				stat.bindLong(8, remoteAppInfo.getTransferResult());
				stat.bindString(9, remoteAppInfo.getRecordId());
				long result = stat.executeInsert();
				if (result < 0) {
					return false;
				}
			}
			db.setTransactionSuccessful();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			try {
				if (null != db) {
					db.endTransaction();
					db.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return true;
	}

 

 

耗时:1365ms

 

 

分享到:
评论

相关推荐

    android中SQLite数据库中用insert同时插入多条记录的方法和效率比较

    Android 中 SQLite 数据库中用 insert 同时插入多条记录的方法和效率比较 在 Android 开发中,我们常会遇到这样一种情况:在建立一个 SQLite 数据库时,想同时插入大量数据。那么应该怎么做呢?下面我们将比较三种...

    Android-greenDaoRoomLiteOrm对比

    在100000条数据的批量插入场景下,两者都需要合理地管理事务和线程,以防止内存溢出或阻塞主线程。GreenDao可能需要更细致地控制批处理的大小,以保持内存稳定。相比之下,Room可以利用其异步操作和LiveData功能,...

    android强大好用的开源数据库控件

    7. **性能优化**: LitePal进行了性能优化,如批量插入,缓存查询结果等,确保在保持易用性的同时,也能保证应用程序的运行效率。 8. **良好的社区支持**:作为开源项目,LitePal有活跃的社区和丰富的文档,遇到...

    execSQL和SQLiteStatement的executeInsert方法插入1000条数据所需要的时间对比

    在批量插入数据时,性能优化显得尤为重要。本话题将深入探讨`execSQL`方法与`SQLiteStatement`的`executeInsert`方法在插入1000条数据时的效率差异。 `execSQL`方法是SQLiteOpenHelper或SQLiteDatabase类中的一个...

    Android数据库框架

    - 插入数据:`LiteOrm.save(user);` - 查询数据:`List&lt;User&gt; users = LiteOrm.query(User.class);` - 更新数据:`LiteOrm.update(user);` - 删除数据:`LiteOrm.delete(user);` 3. **Lite ORM的高级特性** - ...

    Android-Android----数据库框架GreenDao的使用

    通过GreenDao,开发者可以定义数据模型,然后自动生成对应的数据库访问层(DAO)代码,极大提高了开发效率。 **二、GreenDao的安装与配置** 1. 添加依赖:在项目的build.gradle文件中添加GreenDao的依赖库,通常...

    android的sqlite数据库查看器——sqlitespy1.9

    在Android开发中,SQLite是一个非常重要的组件,它是...总之,SQLiteSpy是一个强大的SQLite数据库管理和调试工具,对于Android开发者来说,它能够极大地提升数据库操作的效率和便利性,帮助优化应用的性能和数据管理。

    GreenDao增 删 改 查

    如果要批量更新,可以使用updateOrInsert()方法,它会检查对象是否存在,如果不存在则插入,如果存在则更新。例如: ```java User user = daoSession.getUserDao().load(id); user.setName("李四"); daoSession...

    安卓开发框架工具类相关-androiddb工具类.zip

    3. `insert(String table, ContentValues values)`: 向指定表中插入数据。 4. `update(String table, ContentValues values, String whereClause, String[] whereArgs)`: 更新指定条件下的数据。 5. `delete(String ...

    AndroidDatabaseLibraryComparison,一些流行库之间的测试,运行速度测试,测试它们加载和保存数据的速度。.zip

    这个开源项目"AndroidDatabaseLibraryComparison"专注于对比不同Android数据库库的性能,主要关注它们的加载和保存数据的速度。以下是对这些知识点的详细说明: 1. **Android数据库库**:Android原生支持SQLite...

    sqlite_maestro

    2. 数据操作:插入、更新和删除记录,支持批量操作,以及数据过滤、排序和分组。 3. 查询构建:使用可视化的查询构建器创建复杂的SQL查询,包括JOIN、GROUP BY和HAVING子句。 4. 导入导出:从多种文件格式(如CSV、...

    sqlite优化方法比较

    可以先备份旧数据,然后清空表,最后插入新数据。 6. **使用预编译语句(PreparedStatement)**: - 预编译SQL语句可以提高执行效率,防止SQL注入攻击,同时减少解析和编译的开销。 7. **适时关闭数据库连接**: ...

    ActiveAndroid Demo

    5. **批量操作**:ActiveAndroid还支持批量插入和更新,提高性能。 四、优缺点分析 优点: - 简化数据库操作,提高开发效率。 - 自动数据库版本管理和迁移,降低维护成本。 - 提供内存缓存,提升应用性能。 - 开源...

    SQLiteHelper(收集整理5种).有功能全的.也有精简的版本

    增强版SQLiteHelper在基础版的基础上,可能包含了更丰富的功能,如事务处理、批量插入、自定义查询等。它可能包含了一些实用的辅助方法,如`startTransaction()`, `setTransactionSuccessful()`, `endTransaction()...

    pocketdb:Android SharedPreferences帮助器

    总结起来,PocketDB作为SharedPreferences的高级封装,使得Android应用在处理简单数据存储时能享受到更丰富的功能和更高的开发效率。对于那些不想在SharedPreferences上花费太多时间的开发者,PocketDB无疑是一个...

    比较全面的SQLiteHelper帮助类

    在实际开发中,开发者可以根据需求扩展SQLiteHelper,添加自定义的方法,例如添加批量插入、分页查询等功能。对于复杂的业务逻辑,可以将数据操作封装为服务或单独的类,提高代码的可读性和可维护性。 总的来说,...

    green--dao

    1. **插入数据**:通过DAO的`insert()`或`insertOrReplace()`方法插入新记录。 2. **更新数据**:使用`update()`方法更新已存在的记录,通常需要先通过`load()`方法获取待更新的对象。 3. **删除数据**:调用`delete...

    greendao-3.2.0和greendao-api-3.2.0 jar包

    绿刀(GreenDAO)是一款针对Android平台... - 对大量数据操作时,考虑使用批量操作以提升效率。 通过理解和掌握以上知识,你可以有效地利用GreenDAO 3.2.0版本进行Android应用的数据库管理,提升开发效率并优化性能。

    水经注CAD智能影像加载插件.rar

    这款插件旨在提升CAD软件在处理地理空间数据,特别是遥感影像数据时的效率和便捷性。它使得用户能够在CAD环境中快速、无缝地加载和操作大量的卫星或航空影像数据,极大地拓展了CAD软件的功能。 插件的核心功能包括...

    扫描全能王

    7. 付费增值功能:虽然基础功能免费,但扫描全能王也提供了付费订阅,解锁更多高级特性,如批量导出、PDF编辑、无水印输出等,为商业用户和专业人士提供更全面的服务。 通过以上描述,可以看出扫描全能王是一款全...

Global site tag (gtag.js) - Google Analytics