0

Android の SQLiteDatabase 挿入メソッドが型変換を自動的に処理するかどうかに興味がありました。

これが私の例です:

列名が age の csv ファイルがあります。その型は INTEGER になります。

データベースとテーブルを既に作成しているとしましょう。

現在、CSVReader を使用して csv ファイルを解析しています。CSVReader は、各行を解析し、各値を String[] のインデックスに挿入します。

データの各行をデータベースに挿入するには、値を格納できる ContentValue オブジェクトを使用する必要があります。

//Parse each line and store in line...

ContentValue values = new ContentValue();
values.put(KEY_AGE, line[1]); // Assume line[1] is the age 

database.insert(table, null, values); 

age 値を文字列として保存し (上記のように)、それをテーブルに挿入すると、Android はデータベースに挿入する前に INTEGER への変換を処理しますか?

一連のテーブルをデータベースに挿入しようとしているため、これを求めています。配列を反復処理して、各 put 呼び出しを明示的に指定すると、よりきれいに見えます。つまり、次のようになります。

また、デザインの提案がある場合は、遠慮なく教えてください。

掃除

int i = 0;
for(String s : TransitContract.Routes.COLUMN_ARRAY) {
    values.put(s, line[i]);
    i++;
}

醜い

values.put(TransitContract.Routes.KEY_ROUTE_ID, line[0]);
values.put(TransitContract.Routes.KEY_AGENCY_ID, line[1]);
values.put(TransitContract.Routes.KEY_SHORT_NAME, line[2]);
values.put(TransitContract.Routes.KEY_LONG_NAME, line[3]);
values.put(TransitContract.Routes.KEY_DESCRIPTION, line[4]);
values.put(TransitContract.Routes.KEY_ROUTE_TYPE, Integer.parseInt(line[5]));
values.put(TransitContract.Routes.KEY_URL, line[6]);
values.put(TransitContract.Routes.KEY_COLOR, line[7]);
values.put(TransitContract.Routes.KEY_TEXT_COLOR, line[8]);

return mDatabase.insert(TransitContract.Routes.TABLE_NAME, null, values);
4

2 に答える 2

1

列を として宣言するとINTEGER、可能であれば、SQLite は自動的に文字列を数値に変換します。

Type Affinityのドキュメントを参照してください。

于 2013-06-29T19:21:03.900 に答える
1

制限しContentProviderない (つまり、SQLiteDatabase.insert()メソッドに直接渡す) 場合は、動作するはずです。SQLiteは、クエリ/挿入で使用される型と実際の列の型についてそれほどうるさくありません。

ただし、挿入する前に値を解析して確認することをお勧めします。そうしないと、整数として解析できない文字列を実際に挿入する可能性があり、値の取得に失敗する可能性があります。

参考文献:

于 2013-06-29T18:01:21.037 に答える