2017-06-05 10 views
-2

私はアンドロイドを初めて使っています。以前はSQLite DBで作業していませんでした。
これは非常に基本的な質問ですが、解決策を見つけることができません。SQLiteDatabase.execSQL(クエリ) - onCreate()メソッド内の複数のSQLコマンドが機能しない

コードは、INSERTコマンドを実行することにより、SQLiteのはexeptionをスローしながら、最初の三つのコマンドが、正常に実行

public void onCreate(SQLiteDatabase db) { 

    String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + FORMULA + "(" 
      + CAT_CD + " TEXT ," + S_CAT_CD + " TEXT, PRIMARY 
KEY(CAT_CD,S_CAT_CD))"; 
    db.execSQL(CREATE_CATEGORIES_TABLE); 

    String CREATE_CAT_DESC_TABLE="CREATE TABLE "+ FORMULA_CAT_DESC + " 
("+CAT_CD+" TEXT PRIMARY KEY, "+ DESC +" TEXT) "; 
    db.execSQL(CREATE_CAT_DESC_TABLE); 

    String CREATE_CURRENCY_TABLE="CREATE TABLE "+ VI_CURRENCY + "("+ 
CURRENCY_CD +" TEXT PRIMARY KEY, "+ CURRENCY_SIGN +" TEXT) "; 
    db.execSQL(CREATE_CURRENCY_TABLE); 

    String query= "INSERT INTO "+ VI_CURRENCY +" ("+CURRENCY_CD +", 
"+CURRENCY_SIGN+ ") VALUES " + 
      "('INR', '₹'), " + 
      " ('USD','$') " + 
      "('JPY','¥') "; 
    db.execSQL(query); 
} 

(宣言を想定)はこちら。

+0

LogCatを使用して、クラッシュに関連するJavaスタックトレースを調べます。https://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this – CommonsWare

+1

単一のSQLコマンドを実行して複数の行を挿入します。 –

答えて

1

あなたは、各レコード

String query1 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('INR', '₹')" ; 

String query2 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('USD','$')" ; 

String query3 = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + "('JPY','¥')" ; 

db.execSQL(query1); 
db.execSQL(query2); 
db.execSQL(query3); 

のためのSQL文を作成するか、それはこのようになり、正しいsintaxで、1つのステートメントで複数の値を挿入できます。より多くの情報訪問SqlLiteについては

String query = "INSERT INTO " + VI_CURRENCY + " (" + CURRENCY_CD + ", " + CURRENCY_SIGN + ") VALUES " + 
      "('INR', '₹'), " + 
      "('USD','$'), " + 
      "('JPY','¥')"; 
db.execSQL(query); 

+0

私は何百ものレコードを挿入したいので、何百ものクエリを書く必要がありますか?私はこれが良い解決策ではないと思う。 –

+0

答えを更新しました。構文エラー – fn5341

+0

Ohhです。ありがとうございます。今、クエリは正常に動作しています。 –

1

複数のレコードを挿入する場合は、キー値のペアでハッシュマップオブジェクトのデータを取得する必要があります。同じイテレーターを使用して、表にデータを挿入します。

0

Androidでは書き込み操作が遅いため、数百のデータがある場合は、SQLiteデータベースでトランザクションを使用できます。

db.beginTransaction(); 
try { 
    for(/*your loop*/) { 
     String query = /*your query*/ 

     db.execSQL(query); 
    } 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 

詳細については、this、公式ドキュメントを参照してください。

関連する問題