Android SQLite数据库搜索方法

时间:2014-02-12 09:19:08

标签: java android sqlite

我的Android sqlite和游标有问题,我想验证在文本框中输入的值不在我的数据库中。

ContenuBDD contenuBdd = new ContenuBDD(MainActivity.this);
                contenuBdd.open();


                if(contenuBdd.recherche(text.getText().toString())== true)
                {
                    System.out.println("ok");
                }
                else
                {
                    System.out.println("not ok");

                }

                contenuBdd.close();

搜索方法代码:

public boolean recherche(String titre){

    Cursor c = bdd.query(TABLE_CONTENU, new String[] {COL_ID, COL_VALEUR}, COL_VALEUR + " LIKE \"" + titre +"\"", null, null, null, null);
    if(c == null)
    {
        return true;
    }
    else
    {
        return false;
    }
}

现在,即使我输入的数据不在数据库中,也会显示“not ok”

我的要求:

String query = new String( "select valeur from table_contenu where valeur = "+titre);

我的logcat:

02-12 10:51:02.338: E/AndroidRuntime(11642): android.database.sqlite.SQLiteException: near "=": syntax error (code 1): , while compiling: select valeur from table_contenu where valeur =

4 个答案:

答案 0 :(得分:1)

您应该更喜欢测试:

 if(c.getCount() == 0) 

而不是

  if(c == null) 

也许你可以使用原始查询管理它,如:

String q = "SELECT * FROM your_table WHERE titre = titre";
Cursor c= mDb.rawQuery(q, null);

答案 1 :(得分:1)

正如我在https://stackoverflow.com/a/24144236/2413303

的回答中提到的那样

您应该进行查询的方式如下:

private String[] allColumns = { Table1.COLUMN_ID, Table1.COLUMN_NAME,
        Table1.COLUMN_OTHERCOLUMN };

public ItemDB findEmployeeById(long id)
{
    ItemDB employee = null;
    Cursor cursor = database.query(ItemTable.TABLE_NAME, allColumns, ItemTable.COLUMN_ID + " = ?", new String[] {""+id}, null, null, null);
    if(cursor.moveToFirst())
    {
        employee = createItemFromCursor(cursor);
    }
    return employee;
}

如果您需要专门重命名列(例如,rawQueryid,因为适配器需要它),另一种可能的方法是使用_id

public Cursor getRawQueryCursor()
{
    return database
            .rawQuery(
                    "SELECT id as _id, name, dateFrom || ' - ' || dateTo as date FROM " + ItemTable.TABLE_NAME + " WHERE lower(name) = ?",
                    new String[] { inputName });
}

答案 2 :(得分:0)

我认为,SQLite总是返回Cursor,但如果找不到任何内容,Cursor#getCount()将导致0,如API中所示。

答案 3 :(得分:-1)

public boolean CheckIsDataAlreadyInDBorNot(String TableName, String dbfield, String fieldValue)
    { 
         db = this.getReadableDatabase();

        String Query = "Select * from " + TableName + " where " + dbfield + "="
                + fieldValue;
        Cursor cursor = db.rawQuery(Query, null);

        if(cursor.getCount() <=0)
         {
             return false;
         }
             return true;
    }