簡體   English   中英

Android SQLlite數據庫搜索方法

[英]Android SQLlite database search method

我的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 =

您應該更喜歡測試:

 if(c.getCount() == 0) 

代替

  if(c == null) 

也許您可以使用原始查詢來管理它:

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

正如我在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;
}

如果您需要專門重命名列(例如,由於適配器需要將id更改為_id ,則另一種可能的方法是使用rawQuery

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 });
}

我假設,SQLite始終返回Cursor ,但是在未找到任何內容的情況下, Cursor#getCount()將導致0 ,如API中所示。

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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM