我的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 =
答案 0 :(得分:1)
您应该更喜欢测试:
if(c.getCount() == 0)
而不是
if(c == null)
也许你可以使用原始查询管理它,如:
String q = "SELECT * FROM your_table WHERE titre = titre";
Cursor c= mDb.rawQuery(q, null);
答案 1 :(得分:1)
正如我在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;
}
如果您需要专门重命名列(例如,rawQuery
到id
,因为适配器需要它),另一种可能的方法是使用_id
:
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 });
}
答案 2 :(得分:0)
我认为,SQLite总是返回Cursor
,但如果找不到任何内容,Cursor#getCount()
将导致0
,如API中所示。
答案 3 :(得分:-1)
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;
}