2013-09-02 4 views
0
String[] columns = new String[]{ KEY_NAME, KEY_NUM }; 
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "=" + name, null, null, null, null); 

Это код, который я использую для возврата тех столбцов, которые соответствуют определенной строке, которую я передал в i.e. name. Однако это не работает. Кроме того, если я заменил предложение where на null, все строки вернутся правильно. Пожалуйста помоги. Благодаря!WHERE предложение в Android SQLite

Строки исходной таблицы, таким образом,

public static final String KEY_ROWID = "_id"; 
public static final String KEY_NAME = "surveyString"; 
public static final String KEY_NUM = "numOfQuestions"; 
+1

Это не совсем связано с вашим вопросом, но в любое время я вижу конкатенации в запросе, это сильный показатель его уязвимости к [инъекции SQL] (https: // эн. wikipedia.org/wiki/SQL_injection). Подумайте, посмотрите на какую-то подготовленную инструкцию. – Makoto

+0

Подготовленные утверждения не могут использоваться для запросов. Следующая лучшая альтернатива - я думаю, используя rawQuery, который тоже не работает. –

+0

Вы уверены, что 'name' действительно точно соответствует значению в вашей базе данных? Если вы замените '+" = "+ name" на '+" LIKE% "+ name +"% "', то результат тот же? – jbihan

ответ

-1

Вы пробовали ставить ' между переменной?

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "='" + name + "'", null, null, null, null); 
+0

Большое спасибо! Это тот, который я пропустил :) –

+0

Это не работает, если 'name' содержит цитату. –

+0

@CL. Я просто делаю код работы, для SQL-инъекции вы можете сделать что-то вроде 'name.replace (" '"," \' ")' – Sieryuu

1

Вы должны передать значения, где это в параметре «selectionArgs» в запросе.

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "=?", new String[]{name}, null, null, null);

+0

Я уже пробовал это. Не работает:/ –

+0

@OscarOrcas: Вместо этого используйте [подготовленные заявления] (http://www.sqlite.org/c3ref/stmt.html). –

+0

Я думаю, что подготовленные операторы используются только для операторов (например, CREATE и т. Д.), А не для запросов, подобных SELECT. –

0
public void addUserNotes(String notes,int id){ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    values.put(KEY_NOTES, notes);// Contact Phone Number 
    db.insert(TABLE_CONTACTS, null, values); 
    String s=Integer.toString(id); 
    final String[] whereArgs = {s}; 
    db.update(TABLE_CONTACTS, values, "id = ?", whereArgs); 
    db.close(); // Closing database connection 
} 
Смежные вопросы