2012-10-03 52 views
1

我在创建数据库时将数据插入数据库时​​出现语法错误。Android INSERT语句问题

我使用下面的代码:

//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)?

不知道我要去哪里错了..

非常感谢。

回答

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); 
+0

好的谢谢,试过了,但后来得到SQLiteException:1列的值为4。认为我应该包括括号,但仍然有错误 - 我已经相应地修改了这个问题。 – Scamparelli

+0

@Scamparelli看到我的更新 – RedFilter

+0

感谢RedFilter,很好的回应 - 刚到家,并会放弃。将尽快剔!戴夫 – Scamparelli

-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(); 
-1

只需将字符串值放入引号

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