Android SQLite SELECT查询

Hir*_*age 21 java sqlite android

String从a中获取了值EditText并将其设置为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")));
Run Code Online (Sandbox Code Playgroud)

但它不起作用.有什么建议?

zzz*_*zzz 39

尝试修剪字符串以确保没有额外的空白区域:

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

也可以c.moveToFirst()像@thinksteep一样使用.

  • 这个例子很糟糕,允许SQL注入.为什么不正确使用第二个参数而不是插入null? (7认同)

小智 27

这是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();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,使用c.getString(c.getColumnIndex("column1"))优于c.getString(0):如果更改查询,则不必更新索引. (2认同)

小智 13

尝试使用以下语句:

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

Android要求WHERE子句与?进行比较,然后指定相同数量的?在查询的第二个参数中(当前您具有null).

正如Nambari所提到的,你应该使用c.moveToFirst()而不是c.moveToNext()

还有,名字会有引用吗?这也可能搞砸了.