Sqlite批量插入大数据的例子

这两天被数据库插入批量数据折磨的有点抓狂还好找到了解决方法,话不多说,直接看下面两部分代码:

SQLiteDatabase db = dbHelper.getWritableDatabase();
//         LogUtils.i("开始解析*****************"+ new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(new Date()));
        for (int i = 0; i < messageArray.length(); i++) {
           try {
            JSONObject messageObject = (JSONObject) messageArray.get(i);
            int stamp = JSONUtils.getInt(messageObject, "nTime", 0);
                        String dbLon = JSONUtils.getString(messageObject, "dbLon", "");
            String dbLat = JSONUtils.getString(messageObject, "dbLat", "");
             /******************** 数据库事务开始 **************************/
                db.beginTransaction();
            db.execSQL("insert into waybaby(stamp,lontude,lantude) values(?,?,?)",new Object[] { stamp, dbLon,dbLat });
                        db.setTransactionSuccessful();
                        db.endTransaction();
             /******************** 数据库事务结束 **************************/
            tranceList.add(Double.parseDouble(dbLat));
            tranceList.add(Double.parseDouble(dbLon));
            LatLng latLng = new LatLng(Double.parseDouble(dbLat), Double.parseDouble(dbLon));
            latLngline.add(latLng);
            } catch (JSONException e) {
                e.printStackTrace();
              }
            }
              dismissProgressDialog();
//            LogUtils.i("解析结束*****************"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
                      // 画路线轨迹
              onMapLoaded();

这段代码是用来解析数据的,然后插入到本地数据库里面,总共:1000 条数据,用时:10秒~~15秒。十五秒的等待,花儿都谢了。请看下面修改后的代码:

SQLiteDatabase db = dbHelper.getWritableDatabase();
//      LogUtils.i("开始解析*****************"+ new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(new Date()));
          for (int i = 0; i < messageArray.length(); i++) {
            try {
                 JSONObject messageObject = (JSONObject) messageArray.get(i);
                 int stamp = JSONUtils.getInt(messageObject, "nTime", 0);
                 String dbLon = JSONUtils.getString(messageObject, "dbLon", "");
                 String dbLat = JSONUtils.getString(messageObject, "dbLat", "");
                 LocusEntity locusEntity = new LocusEntity(stamp, dbLon, dbLat);
                 locusEntities.add(locusEntity);
                 tranceList.add(Double.parseDouble(dbLat));
                 tranceList.add(Double.parseDouble(dbLon));
                 LatLng latLng = new LatLng(Double.parseDouble(dbLat), Double.parseDouble(dbLon));
                 latLngline.add(latLng);
               } catch (JSONException e) {
                  e.printStackTrace();
              }
            }
//         LogUtils.i("开始插入数据*****************"+ new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(new Date()));
           db.beginTransaction();
           String sql = "insert into waybaby(stamp,lontude,lantude) values(?,?,?)";
            for (LocusEntity locusEntity : locusEntities) {
            SQLiteStatement stat = db.compileStatement(sql);
            stat.bindLong(1, locusEntity.getStamp());
            stat.bindString(2, locusEntity.getLontude());
            stat.bindString(3, locusEntity.getLantude());
            stat.executeInsert();
             }
               db.setTransactionSuccessful();
               db.endTransaction();
              db.close();
//            LogUtils.i("插入数据完毕*****************"+ new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(new Date()));
              dismissProgressDialog();
//            LogUtils.i("解析结束*****************"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
                       // 画路线轨迹
              onMapLoaded();

细心的你,肯定会发现,插入数据的操作,被拿到了for循环的外面,同时插入数据库的操作也改变了,多了一大段代码,从一行变成了十几行,但是效率提高的不是一点两点。这段代码执行的时间: 不到 1 秒,打印的时间信息,你会发现,时间不用1秒 就获取成功了。我打印的时间就不到 1 秒。比之前的效率快的将近十倍,你敢信? 事实就是如此。至于那段代码是什么意思。请自行百度,自己学习。

时间: 2024-10-31 03:17:22

Sqlite批量插入大数据的例子的相关文章

cocoa touch-IOS,SQLite批量插入错误

问题描述 IOS,SQLite批量插入错误 在数据库中插入数据的时候,报错:Prepare-error library routine called out of sequence 代码如下,麻烦帮我看看错误出在哪儿了.谢谢 NSString *databaseName = @"DB.sqlite"; NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainM

jdbc批量出入-jdbc批量插入,数据只有一条

问题描述 jdbc批量插入,数据只有一条 我统一10条插入一次,可是最后数据库只有第十条数据,前九条都没有,插入几次都是,怎么办 List backList = new ArrayList(); Connection con = getConnection(); PreparedStatement stat = null; String str= null; int j = 0; for(int i=0;i<list.size();i++){ str = list.get(i); String[

C# 使用SqlBulkCopy类批量复制大数据

特别注意  sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); 插入的时候列的顺序可以不一致,但名称和数据类型最好要保存一致.不一致时候,也能进行正确的转换,除了比如DataTime数据类型,不能插入一个无效的string时间字符串. 本文转载:http://zhoufoxcn.blog.51cto.com/792419/166052 参考http://www.cnblogs.co

MyBatis批量插入(insert)数据操作_java

在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用MyBatis批量插入,由于之前没用过批量插入,在网上找了一些资料后最终实现了,把详细过程贴出来. 实体类TrainRecord结构如下: public class TrainRecord implements Serializable { private static final long serialVersionUID = -12069604621179

批量生成大数据量的SQL脚本

业务逻辑:利用游标从数据库中现有的表数据,查询出部分属性,来插入到目标表中,来在目标表中生成大批量的数据,SQL实现如下: create or replace procedure add_subscription_c(i_count in number,-- i_count输入值为循环插入记录的次数 i_usersegment in varchar2, i_startaccount in number, o_resultcode out number, o_resulstring out var

批量插入oracle11g数据OracleBulkCopy 出错,没准你也能遇到。

问题描述 PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.ClickDimplscAsOracle.DataAccess.Client.OracleBulkCopy'plsc=NewOracle.DataAccess.Client.OracleBulkCopy("DataSource=80.81.82.154;PersistSecurityInfo=True;Us

存储过程配合UpdateDaset方法批量插入Dataset数据实现代码

复制代码 代码如下: public bool SaveSMSMessage(SMSBatch smsBatch, DataSet smsMessages) { //using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Suppress)) //{ foreach (DataRow row in smsMessages.Tables[0].Rows) row.SetModified(); SqlDataba

java实现jdbc批量插入数据_java

首先介绍三种JDBC批量插入编程方法,进行比较,具体内容如下 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一:使用PreparedStatement加批量的方法 try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(o_url, userName, pass

jdbc批量插入抛异常,怎么找到有问题的数据

问题描述 jdbc批量插入抛异常,怎么找到有问题的数据 批量插入一批数据,如果这批数据中,有几条是有问题的,executeBatch会出异常,我怎么挑出来,是那几条有问题 解决方案 那你可以把批量换成单条插入,然后将插入代码放在try-catch中,并且在catch分支中打印异常时的插入数据信息. 祝好. 解决方案二: 数据量大,必须批量插入,单条插入不行 解决方案三: 你把代码亮出来啊,不然别人没法帮你啊. 解决方案四: 可以先二分法等逐步排除哪些语句语法有问题.