2013-04-09 39 views
0

我不知道我在做什么错,但我试图将表中的一列中的单个整数值从0更新为1.创建数据库时我使用设置列的所有值为零:更新一列正在创建sqlite语法错误

for (int i = 0; i < setups.length; i++) { 
     ContentValues values = new ContentValues(); 
     values.put(JokeDbContract.TblJoke.COLUMN_NAME_SETUP, setups[i]); 
     values.put(JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE, punchlines[i]); 
     values.put(JokeDbContract.TblJoke.COLUMN_NAME_USED, 0); 

     db.insert(JokeDbContract.TblJoke.TABLE_NAME, null, values); 
    } 

然后,在实际活动中,我这样做:

private void findNewJoke() { 
    JokeDb jokeDb = JokeDb.getInstance(this); 
    SQLiteDatabase theDb = jokeDb.getDB(); 
    String selection = JokeDbContract.TblJoke.COLUMN_NAME_USED + "=" + 0; 

    // Query database for a joke that has not been used, update the fields 
    // theJoke and thePunchline appropriately 
    String[] columns = {JokeDbContract.TblJoke._ID, 
         JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE, 
         JokeDbContract.TblJoke.COLUMN_NAME_SETUP, 
         JokeDbContract.TblJoke.COLUMN_NAME_USED}; 

    Cursor c = theDb.query(JokeDbContract.TblJoke.TABLE_NAME, columns, selection, 
         null, null, null, null); 

    if (c.moveToFirst() == false) { 
     Toast.makeText(this, R.string.error_retrieving_joke, Toast.LENGTH_LONG).show(); 
     Log.e(getString(R.string.app_name),"No jokes retreived from DB in JokeActivity.findNewJoke()!"); 
    } 
    else { 
     ContentValues values = new ContentValues(); 
     theSetup = c.getString(c.getColumnIndexOrThrow(JokeDbContract.TblJoke.COLUMN_NAME_SETUP)); 
     thePunchline = c.getString(c.getColumnIndexOrThrow(JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE)); 

     String updateSelection = JokeDbContract.TblJoke.COLUMN_NAME_SETUP + "=" + theSetup; 

     values.put(JokeDbContract.TblJoke.COLUMN_NAME_USED, 1); 

     theDb.update(JokeDbContract.TblJoke.TABLE_NAME, values, updateSelection, null); 
    } 
} 

我的更新得到一个错误:

java.lang.RuntimeException: .... while compiling: UPDATE jokes SET used=? 
WHERE setup=Why do programmers always mix up Halloween and Christmas? 

看来好像我没有得到为使用的列设置的实际值。程序最终做的是在笑话中循环使用= 0,然后在观看时将其设置为1。所以这个查询只会提取那些尚未使用的笑话。我有一种感觉,我错过了简单的东西,人们可以希望。

回答

4

我认为你有引号问题。

例子:

String updateSelection = JokeDbContract.TblJoke.COLUMN_NAME_SETUP + "=\"" + theSetup + "\""; 

然而,推荐的方法来做到这一点,将是:

theDb.update(JokeDbContract.TblJoke.TABLE_NAME, values, JokeDbContract.TblJoke.COLUMN_NAME_SETUP + " = ?", new String[] { theSetup }); 

这是更好地使用字段=,因为这有助于sqlite的缓存查询(我相信吗? )。

+0

就是这样。在这里,我想我已经错误地将我的值设置为它用SET子句给出的语法错误的b/c。谢谢你的帮助。 – 2013-04-09 06:30:23