1

ユーザーが初めてアプリをダウンロードすると、アプリは約 100,000 行のデータを含む CSV ファイルをダウンロードします。

次に、SQLite データベースにデータを入力したいと思います。

これが私のコードです:

InputStream inputStream = activity.openFileInput(file);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;

dbHelper.beginTransaction();

while((line = bufferedReader.readLine()) != null) {
    String[] values = line.replaceAll("'", "''").split(",");
    dbHelper.insert(values);
}

dbHelper.setTransactionSuccessful();
dbHelper.endTransaction();
dbHelper.close();

私の DBHelper クラスでは、メソッドの挿入は次のとおりです。

public void insert(String[] data) {
    ContentValues values = new ContentValues();
    values.put(DBHelper.SHAPE_ID, data[0]);
    values.put(DBHelper.SHAPE_PT_LAT, data[1]);
    values.put(DBHelper.SHAPE_PT_LON, data[2]);
    values.put(DBHelper.SHAPE_PT_SEQUENCE, data[3]);
    myDB.insert(DBHelper.TABLE_SHAPES, null, values);
}

私はこのコードを試してみましたが、うまくいきましたが、それを行うのに7分かかりました...私は何か間違ったことをしていますか? SQLite データベースを作成するためのより良い方法 (より速く読む) はありますか?

4

3 に答える 3

0

パフォーマンスを向上させる準備済みステートメントを使用します。何かのようなもの:

SQLiteStatement statement = db.compileStatement("INSERT INTO " + TABLE_SHAPES + " VALUES(?, ?));

insert()メソッドを次のように変更します。

statement.bindString(1, data[0]);
statement.bindString(2, data[1]);
statement.executeInsert();
于 2013-07-12T03:18:35.637 に答える
0

thisによると、SQLite3 には組み込みの CSV ファイルをインポートする機能があります。

.separator ','
.import '/path/to/csv/data' [table]

これは、 Android でDatabaseUtils.InsertHelperを使用して実行できると思います。

DatabaseUtils.InsertHelper ヘルパー = 新しい DatabaseUtils.InsertHelper(dbFilePath, dbTablename); helper.prepareForInsert(); // bind* メソッドを使用して、ループ内で CSV データの列をヘルパーにバインドします helper.execute();

また、アプリケーションに関連する場合と関連しない場合があるSQLiteStatementの代わりに、クラスが非推奨 (API レベル 17) としてマークされていることもわかります。さらに質問がある場合は、コメントを残してください。

于 2013-07-12T03:45:29.873 に答える