1

データベースの作成時にデータベースにデータを挿入しようとすると、構文エラーが発生します。

私は次のコードを使用しています:

//DatabaseHelper class
private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_INSPECTION_TABLE);
        db.execSQL(CREATE_AREA_TABLE);
        db.execSQL(CREATE_RUN_TABLE);
        db.execSQL(CREATE_LOCATION_TABLE);
        db.execSQL(CREATE_INSPECTORS_TABLE);
        db.execSQL(CREATE_ISSUE_LOCATION_TABLE);
        db.execSQL(CREATE_ISSUE_TYPE_TABLE);
        db.execSQL(CREATE_RACKING_SYSTEM_TABLE);
        db.execSQL(CREATE_COMPONENT_TABLE);
        db.execSQL(CREATE_RISK_TABLE);
        db.execSQL(CREATE_ACTION_TABLE);
        db.execSQL(CREATE_MANUFACTURER_TABLE);

        db.rawQuery("INSERT INTO " + INSPECTORS_TABLE + "(" + INSPECTOR_NAME + ") " + 
                "SELECT 'Joe Bloggs' AS " + INSPECTOR_NAME +
                " UNION SELECT 'John Major' " +
                " UNION SELECT 'Dan the man'"
                , null);

        db.rawQuery("INSERT INTO " + ACTION_TABLE + "(" + ACTION_REQUIRED + ") " + 
                "SELECT 'Red Risk' AS " + ACTION_REQUIRED +
                " UNION SELECT 'Amber Risk' " +
                " UNION SELECT 'Green Risk'"
                , null);

RedFliterのすばらしいアドバイスに従って再度編集しました。クエリは正しいと確信していますが、エラーは発生しませんが、テーブルにレコードが入力されません(DDMSを使用するたびにデータベースが削除されます)。

このコードを適切な場所(つまり、onCreate)に配置していますか?

どこが間違っているのかわからない。

どうもありがとう。

4

3 に答える 3

3

文字列を一重引用符で囲む必要があります。

db.rawQuery("INSERT INTO " + INSPECTIONS_TABLE + " (" + INSPECTOR_NAME + ")          VALUES " + "('Joe Blogs', 'John Smith', 'Franky Hollywood')", null); 

このアプローチはSQLインジェクションの対象となります。これを防ぐ必要があります。

アップデート:

複数行の挿入の場合、次のことを行う必要があります。

db.rawQuery("INSERT INTO " + INSPECTIONS_TABLE + "(" + INSPECTOR_NAME + ") " + "select 'Joe Bloggs' as " + INSPECTOR_NAME + " UNION ALL select 'John Major' UNION ALL select 'Dan the man'", null); 
于 2012-10-03T16:24:55.597 に答える
-1

次のように使用すると、データベースに日付をdefenetly挿入できます...

 SQLiteDatabase db = this.getWritableDatabase();
 ContentValues values = new ContentValues();
 values.put(POST_ID,"Your ID here");
 values.put(POSTER_ID,"Poster id " );
 values.put(POSTER_NAME, msg.poster_name);
 values.put(POSTER_IMAGE_PATH,msg.poster_image_path==null ||msg.poster_image_path.length()==0?"":msg.poster_image_path);
 values.put(PLAYER_TYPE, msg.player_type);
 values.put(POST_TEXT, msg.post_text);
 db.insert(TABLE_NAME, null, values);
 db.close();
于 2012-10-03T16:27:30.673 に答える
-1

文字列値を引用符で囲むだけです

db.rawQuery("INSERT INTO " + 
        INSPECTIONS_TABLE + "(" + INSPECTOR_NAME + ") 
        VALUES " + "('Joe Blogs', 'John Smith', 'Franky Hollywood')", null);
于 2012-10-03T16:28:14.667 に答える