2013-07-06 78 views
3

我不能在我的Android应用程序破解SQLite中一个简单的更新查询..这里是查询,更新查询源码 - Android电子

int fav = 1; 
Cursor c = sqliteDB.rawQuery("UPDATE "+ MyConstants.TABLE_NAME + " SET "+MyConstants.TABLE_NAME+"."+MyConstants.ISFAV+ " = "+fav+ " WHERE " +MyConstants.TABLE_NAME+"."+MyConstants.WORD_NAME+ " = \""+word_name+"\"", null); 

这里是例外,

07-06 23:41:48.723: E/AndroidRuntime(1102): FATAL EXCEPTION: main 
07-06 23:41:48.723: E/AndroidRuntime(1102): android.database.sqlite.SQLiteException: near ".": syntax error (code 1): , while compiling: UPDATE words SET words.isfavor = 1 WHERE words.word = "hello" 
07-06 23:41:48.723: E/AndroidRuntime(1102):  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
07-06 23:41:48.723: E/AndroidRuntime(1102):  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1013) 
07-06 23:41:48.723: E/AndroidRuntime(1102):  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:624) 
07-06 23:41:48.723: E/AndroidRuntime(1102):  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
07-06 23:41:48.723: E/AndroidRuntime(1102):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
07-06 23:41:48.723: E/AndroidRuntime(1102):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
07-06 23:41:48.723: E/AndroidRuntime(1102):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 

回答

5

您继续使用该表名是不合适的。它应该是更多这样的:

int fav = 1; 
Cursor c = sqliteDB.rawQuery("UPDATE "+ MyConstants.TABLE_NAME + " SET "+ MyConstants.ISFAV + " = "+fav+ " WHERE " + MyConstants.WORD_NAME + " = \""+word_name+"\"", null); 

这应该给你,看起来更像这样所得的查询:

UPDATE words SET isfavor = 1 WHERE word = "hello" 
2
  1. UPDATE语句总是只有一个表,所以在表名前添加表名是没有意义的,也是不允许的。
  2. 在SQL中,字符串使用'分隔。 "用于列名称等标识符;当您尝试处理word这个词时,您的查询就会爆炸。
  3. 为了避免字符串格式化的问题,您应该使用参数:
sqliteDB.rawQuery("UPDATE ... WHERE word = ?", 
         new String[] { word_name });