2013-02-25 18 views
0

我有一个数据库从我正在运行查询。我得到这个例外。我认为这与查询中的空间有关,如何解决这个问题。在数据库中使用文本数据类型时出现异常

FATAL EXCEPTION: main 
E/AndroidRuntime(2978): android.database.sqlite.SQLiteException: near "413": syntax error: , while compiling: SELECT DISTINCT _id, number, name, macid, type FROM favorites WHERE _id=(652) 413-6525 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:127) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:53) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1449) 
E/AndroidRuntime(2978): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1405) 
E/AndroidRuntime(2978): at com.honda.phone.DBAdapter.isPresent(DBAdapter.java:145) 
E/AndroidRuntime(2978): at com.honda.phone.FavoriteSelectionActivity.onClick(FavoriteSelectionActivity.java:226) 
E/AndroidRuntime(2978): at android.view.View.performClick(View.java:3511) 
E/AndroidRuntime(2978): at android.view.View$PerformClick.run(View.java:14105) 
E/AndroidRuntime(2978): at android.os.Handler.handleCallback(Handler.java:605) 
E/AndroidRuntime(2978): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(2978): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(2978): at android.app.ActivityThread.main(ActivityThread.java:4424) 
E/AndroidRuntime(2978): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(2978): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(2978): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
E/AndroidRuntime(2978): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
E/AndroidRuntime(2978): at dalvik.system.NativeStart.main(Native Method) 

这里是代码

public boolean isPresent(String number) throws SQLException 
    { 
     boolean returnValue = false; 
     Cursor mCursor = 
       db.query(true, DATABASE_TABLE, new String[] { 
         KEY_ROWID, 
         KEY_NUMBER, 
         KEY_NAME, 
         KEY_MACID, 
         KEY_TYPE 
         }, 
         KEY_ROWID + "=" + number, 
         null, 
         null, 
         null, 
         null, 
         null); 
     if (mCursor != null) { 
      if(mCursor.getCount() == 0){ 
       returnValue = false; 
      }else{ 
       returnValue = true; 
       mCursor.moveToFirst(); 
      } 

     } 
     return returnValue; 
    } 

我打电话这种isPresent()方法与包含(652) 413-6525的字符串。

+0

请提供代码也 – Riskhan 2013-02-25 10:03:10

回答

0

不看你的代码或数据库结构,很难确切地说出修复它的正确方法是什么。但是,从错误消息中可以明显看出,您尝试将电话号码用作_id字段的参数。

我打算在这里继续讨论,并建议您将该值与number字段进行比较。在这种情况下,您的查询应该是:

SELECT DISTINCT _id, number, name, macid, type FROM favorites WHERE number='(652) 413-6525' 

请注意围绕电话号码的单引号。它们是您处理文本字段而不是数字的指标。

更新:你确实应该使用parametrised查询:

Cursor mCursor = 
     db.query(true, DATABASE_TABLE, new String[] { 
       KEY_ROWID, 
       KEY_NUMBER, 
       KEY_NAME, 
       KEY_MACID, 
       KEY_TYPE 
       }, 
       KEY_ROWID + "=?", 
       new String[] { number }, 
       null, 
       null, 
       null, 
       null); 
+0

感谢。你让我在那里。但我仍然得到例外。现在'数字'代替'_id' – 2013-02-25 10:12:13

+0

@rohit我更新了答案。 – 2013-02-25 10:21:47

+0

谢谢你的工作 – 2013-02-25 10:23:36

相关问题