0

Androidデータベースに次のフィールドを挿入する必要があります。

このコードは私の活動にあります

for(int k=0; k<pdvs.size(); k++)
      {
       Map<String, String> testMap1 = new HashMap<String, String>();
       testMap1.put("pos_id", pdvs.get(k).pos_id);
       testMap1.put("visit_date", pdvs.get(k).nextvisitDate);
       testMap1.put("roadmap_id", String.valueOf(roadmap_id));
       testMap1.put("sys_visit_status_id", "1");
       testMap1.put("gps_latitude", "5");
       testMap1.put("gps_longitude", "5");

      db.insertData("pos_visit", testMap1);

}

挿入する行は約16行あります...それほど多くはありません。それでも私はこのようなものを使おうとしましたContentValuesこれはSQLiteOpenHelperクラスのコードです

public long insertData(String tableName, Map<String, String> map) {
            long id;
        ContentValues columnValues = new ContentValues();

            db.beginTransaction();
            try{

        for (Map.Entry<String, String> entry : map.entrySet()) {
            String columnName = entry.getKey();
            String value = entry.getValue();
            columnValues.put(columnName, value);

        }
        id = db.insert(tableName, null, columnValues);

            db.setTransactionSuccessful();
            }finally{
                db.endTransaction();
            }
            return id;
    }

ただし、16行を導入するにはまだ約10〜12秒かかります。とにかく、その後、私InsertHelperははるかに高速であることが知られていることを知り、これを行いました:

 public long insertData(String tableName, Map<String, String> map) {
            long id = 0;
            int i = 0;
            int [] columnIndex = new int[map.size()];
            String [] value = new String[map.size()];

        InsertHelper ih = new InsertHelper(db, tableName);

            for (Map.Entry<String, String> entry : map.entrySet()) {

            String columnName = entry.getKey();
                    columnIndex[i] = ih.getColumnIndex(columnName);
            value[i] = entry.getValue();
                    i++;
        }

            try{
            ih.prepareForInsert();
        for (int k=0; k<columnIndex.length; k++) {

             ih.bind(columnIndex[k], value[k]);
        }
                 id = ih.execute();
            }finally{
            ih.close();
            }

            return id;
    }

しかし、結果として、この2番目の方法は最初の方法と同じくらい遅くなります!!! データベースへの挿入速度を向上させる方法について、誰かが私にアイデアを与えることができますか?これらの方法で私が間違っていることは何ですか?

ありがとうございました!!!

4

1 に答える 1

0

外側のループをトランザクションでラップし、insertData メソッドでそれを取り除く必要があります。

現在、pdvs セットの各要素に対して、オープン トランザクション、挿入、セット成功の完全なチェーンを呼び出します。pdvs を常に全体として永続化する必要がある場合は、操作全体で 1 つのトランザクションのみを使用する必要があります。これにより、コードが著しく高速になります。

// begin transaction here
for(int k=0; k<pdvs.size(); k++)
                    {
                        Map<String, String> testMap1 = new HashMap<String, String>();
                    testMap1.put("pos_id", pdvs.get(k).pos_id);
                    testMap1.put("visit_date", pdvs.get(k).nextvisitDate);
                    testMap1.put("roadmap_id", String.valueOf(roadmap_id));
                    testMap1.put("sys_visit_status_id", "1");
                    testMap1.put("gps_latitude", "5");
                    testMap1.put("gps_longitude", "5");

                    db.insertData("pos_visit", testMap1);

                    }
//set success here

そして、あなたのinsertDataでは、トランザクションなしでinsertを使用するだけです

于 2012-07-19T09:35:31.087 に答える