2

SQLは

INSERT INTO "quotes" VALUES(1,1,1,'This is a quote','This is a quote in german','By Me','jackson',1,1,1305587611,'0','Thriller');

テキストファイルから読み取った後、db.execSQLを使用してこの行を実行しています。

            InputStream is = myContext.getResources().openRawResource(R.raw.quotesinsert);
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String readLine = null;
            db.execSQL(QUOTE_DB_CREATE);                    
            while ((readLine = br.readLine()) != null) {
                db.execSQL(readLine); 
            }

これは Android の他のすべてのバージョンで機能しますが、ICS(4.0.4) ではクラッシュします。

01-14 02:07:46.271: E/AndroidRuntime(1802): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.foo.quotesapp/com.foo.quotesapp.QuoteList}: android.database.sqlite.SQLiteException: near "?INSERT": syntax error

テーブルを作成する SQL とこの挿入をスタンドアロンの SQLite プログラムで試してみましたが、うまくいきました。

4

2 に答える 2

1

テキスト ファイルは UTF-8 でエンコードされており、先頭にバイト オーダー マークを挿入するプログラムで作成されています。

Java/Android ランタイムは、ファイルから読み取るときにこの文字を削除しません。あなたはこれを自分でしなければなりません。
(この動作は意図的なものです。UTF-8 エンコーディングが初期 BOM を認識しないおよびUTF-8 デコーダーのバイトオーダー マークの処理が変更された を参照してください。)

于 2013-01-17T08:53:42.090 に答える
0

SQL ステートメントが単一であることを確認します (SQL ステートメントの前にスペースを入れ、後にスペースを入れます)。

于 2013-01-16T01:53:06.023 に答える