簡體   English   中英

Android SQLite SELECT 查詢

[英]Android SQLite SELECT Query

我從EditText獲取了String值並將其設置SELECT QUERY after WHERE條件SELECT QUERY after WHERE

作為

TextView tv = (TextView) findViewById(R.id.textView3);
EditTextet2 et = (EditText) findViewById(R.id.editText1);

String name = et.getText().toString();

Cursor c = db.rawQuery("SELECT * FROM tbl1 WHERE name = '"+name+"'", null); 

c.moveToNext();

tv.setText(c.getString(c.getColumnIndex("email")));

但它不起作用。 有什么建議么?

嘗試修剪字符串以確保沒有多余的空格:

Cursor c = db.rawQuery("SELECT * FROM tbl1 WHERE TRIM(name) = '"+name.trim()+"'", null);

也像提到的c.moveToFirst()一樣使用c.moveToFirst()

這是 select 語句的完整代碼。

SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery("SELECT column1,column2,column3 FROM table ", null);
if (c.moveToFirst()){
    do {
        // Passing values 
        String column1 = c.getString(0);
        String column2 = c.getString(1);
        String column3 = c.getString(2); 
        // Do something Here with values
    } while(c.moveToNext());
}
c.close();
db.close();

嘗試使用以下語句:

Cursor c = db.rawQuery("SELECT * FROM tbl1 WHERE name = ?", new String[] {name});

Android 要求 WHERE 子句與 ? 進行比較,然后您指定相同數量的 ? 在查詢的第二個參數中(您當前為空)。

正如 Nambari 提到的,你應該使用c.moveToFirst()而不是c.moveToNext()

另外,名字可以有引號嗎? 這也可能把事情搞砸。

這是下面的代碼。

String areaTyp = "SELECT " +AREA_TYPE + "  FROM "
            + AREA_TYPE_TABLE + " where `" + TYPE + "`="
            + id;

其中 id 是顯示結果的條件。

 public User searchUser(String name) {
    User u = new User();
    SQLiteDatabase db = this.getWritableDatabase(); //get the database that was created in this instance
    Cursor c = db.rawQuery("select * from " + TABLE_NAME_User+" where username =?", new String[]{name});
    if (c.moveToLast()) {
        u.setUsername(c.getString(1));
        u.setEmail(c.getString(1));
        u.setImgUrl(c.getString(2));
        u.setScoreEng(c.getString(3));
        u.setScoreFr(c.getString(4));
        u.setScoreSpan(c.getString(5));
        u.setScoreGer(c.getString(6));
        u.setLevelFr(c.getString(7));
        u.setLevelEng(c.getString(8));
        u.setLevelSpan(c.getString(9));
        u.setLevelGer(c.getString(10));
        return u;

    }else {
        Log.e("error not found", "user can't be found or database empty");
        return u;
    }

}

這是我的代碼,用於選擇一個用戶和一個用戶,以便您啟動類的空對象,然后調用可寫數據庫使用游標,以防萬一這里需要一個游標,您可以選擇使用:1-

   if (c.moveToLast()) { } //it return the last element in that cursor 

或使用:2-

 if(c.moveToFirst()) {  } //return the first object in the cursor 

並且不要忘記,如果數據庫為空,您將不得不處理,在我的情況下,我只返回一個空對象

祝你好運

詳細解答:

String[] selectionArgs = new String[]{name};
    Cursor c = db.rawQuery(
       "SELECT * FROM " + tabl1 + 
       " WHERE " + name + " = ? ", selectionArgs
    );

selectionArgs :這將您希望與之比較的'name'作為參數。

此處請注意“一個 Cursor 對象,它位於您引用的表的第一個條目之前”。

所以,轉到第一個條目:

c.moveToFirst();

getColumnIndex(String ColumnName) :返回給定列名的從零開始的列索引。

tv.setText(c.getString(c.getColumnIndex("email")));

如果您想在 'name' 列下搜索給定名稱的多行,然后使用如下循環:

if (cursor.moveToFirst()){
    do{
        ////go traversing through loops
           
    }while(cursor.moveToNext());
}
    

這應該可以解決問題。

暫無
暫無

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

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