美文网首页
android SQL 优化

android SQL 优化

作者: ddsfec | 来源:发表于2020-03-12 21:36 被阅读0次

    首先是jdbc 使用的是 SQLiteDatabase

    /** * 连接数据库 * @param db * @return */ public static SQLiteDatabase connection(@NotNull String db) { return sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(db, null); }
    然后我这边是读的流文件,考虑到内存大小和文件内容未知
    采用读一行插一行
    ``
    /**
    * 将文件读成string
    */
    private fun readFileAsString(url: String,insert:(s:String) -> String) {
    var file =File(url)
    if(!file.exists()){//不存在
    System.out.println("url")
    return
    }
    loading.show();
    var thread =Thread({
    System.out.println("线程")
    var bufferedReader= BufferedReader(FileReader(file))
    var line:String?=null
    println("开始"+System.currentTimeMillis())

            sql.beginTransaction()
    
            while ({line=bufferedReader.readLine();line}()!=null){
                //insert(line.toString())
                var stmt =sql.compileStatement(insert(line.toString()));
                stmt.execute();
                stmt.clearBindings();
              // println("ff"+System.currentTimeMillis())
            }
            println("结束"+System.currentTimeMillis())
            bufferedReader.close()
    
            sql.setTransactionSuccessful();
            sql.endTransaction();
            if(insert.equals(::import1)){
                var list = dbQuery1()
                runOnUiThread {
                    mList.clear()
                    mList.addAll(list)
                    mAdapter.notifyDataSetChanged()
                    dataImportSearchLL.visibility=View.VISIBLE
                    loading.dismiss()
                }
            }else if(insert.equals(::import2)){
                var count= dbQuery2()
                System.out.println(count)
                runOnUiThread {
                    dataImportJZBNumTv.setText((count/2).toString())
                    loading.dismiss()
                }
    
            }
    
    
    
    
        })
    
        thread.start()
    
    
    }
    

    ``
    上面代码就是优化事务,可见他每次插入都开关了事务
    插入需要用到SQLiteStatement说明这个就是SQLiteDatabase jdbc的封装的这个
    SQLiteStatement可以使用mSQLiteStatement.bindString(1, randomName);来替换sql语句中的 ?占位符。毕竟这个就是为了优化插入的嘛,我直接喜欢用拼好的sql

    然后优化效果: 插入数据约2000*40条,
    优化前22秒
    优化后4秒

    相关文章

      网友评论

          本文标题:android SQL 优化

          本文链接:https://www.haomeiwen.com/subject/hhfgjhtx.html