Android SQLite查询语法错误

时间:2014-04-29 03:36:00

标签: android sql database sqlite

我是Android和SQLite的新手。

我正在准备一个代码来查找表中是否存在给定的电话号码(在EditText框中给出的值)。

我使用了以下代码,但它显示错误:

c = dataBase.rawQuery("SELECT count(*) FROM "+ Dbasehelper.TABLE_NAME+
                      " WHERE "+ Dbasehelper.KEY_LNAME.toString()+" = " +
                       txtNum.getText().toString(),null);

保存的电话号码与以下表格类似 例如:

(775)758-96

LogCat记录:

04-29 08:56:09.085: D/OpenGLRenderer(5311): Flushing caches (mode 0)
04-29 08:56:11.095: E/okstartr(5311): bdok
04-29 08:56:11.105: E/okstartr(5311): bdok
04-29 08:56:11.105: I/SqliteDatabaseCpp(5311): sqlite returned: error code = 1, msg = near "655": syntax error, db=/data/data/com.pjct.waysafe/databases/WAS.db
04-29 08:56:11.105: D/AndroidRuntime(5311): Shutting down VM
04-29 08:56:11.105: W/dalvikvm(5311): threadid=1: thread exiting with uncaught exception (group=0x40a5c1f8)
04-29 08:56:11.115: E/AndroidRuntime(5311): FATAL EXCEPTION: main
04-29 08:56:11.115: E/AndroidRuntime(5311): android.database.sqlite.SQLiteException: near "655": syntax error: , while compiling: SELECT count(*) FROM friends WHERE phone = (755) 655-745
04-29 08:56:11.115: E/AndroidRuntime(5311):     at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
04-29 08:56:11.115: E/AndroidRuntime(5311):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
04-29 08:56:11.115: E/AndroidRuntime(5311):     at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)

3 个答案:

答案 0 :(得分:1)

您的问题是您将txtNum直接插入到SQL字符串中,但SQL是一种必须引用字符串的编程语言。

为避免格式化此类问题,您应该使用参数:

c = dataBase.rawQuery("SELECT count(*) FROM "+ Dbasehelper.TABLE_NAME+
                      " WHERE "+ Dbasehelper.KEY_LNAME +" = ?",
                      new String[] { txtNum.getText() });

答案 1 :(得分:0)

请尝试此代码。

String sqlString = "SELECT count(*) FROM "+ Dbasehelper.TABLE_NAME+" WHERE "+ Dbasehelper.KEY_LNAME+" = '" + txtNum.getText().toString()+"'";

    cursor = sqLiteDatabase.rawQuery(sqlString, null);
    if (cursor != null & cursor.getCount() > 0) {
        try {
            if (cursor.moveToFirst()) {
                do {

                    // do some things

                } while (cursor.moveToNext());
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            cursor.close();
        }
    }

可能有效。希望。运气最好!

答案 2 :(得分:-1)

下面你好帮助

 //Get Row Count
 public int getCount() {
  String countQuery = "SELECT  * FROM " + TABLE_TEST;
  int count = 0;
  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(countQuery, null);
  if(cursor != null && !cursor.isClosed()){
   count = cursor.getCount();
   cursor.close();
  } 
  return count;
 }

如果需要更多详细信息,请访问以下链接:Android Sqlite Tutorial