[英]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.