SQLiteDatabase - 如何使用 where 子句?
Posted
技术标签:
【中文标题】SQLiteDatabase - 如何使用 where 子句?【英文标题】:SQLiteDatabase - How to use where clause? 【发布时间】:2012-03-15 17:17:12 【问题描述】:public Cursor fetchTimetable()
return mDb.query(DATABASE_TABLE_TIMETABLE, new String[] TIMETABLE_ROWID, TIMETABLE_MODULECODE, TIMETABLE_MODULENAME, TIMETABLE_ROOM, TIMETABLE_LECTURER, TIMETABLE_TIME, null, null, null, null, null);
例如,如果我想要 TIMETABLE_MODULECODE = 123。我将如何做到这一点,我已经阅读了它的第一个空值。我已经在下面尝试过,但仍然无法正常工作
public Cursor fetchTimetable()
String a = "TIMETABLE_CODE = ADD";
return mDb.query(DATABASE_TABLE_TIMETABLE, new String[] TIMETABLE_ROWID, TIMETABLE_MODULECODE, TIMETABLE_MODULENAME, TIMETABLE_ROOM, TIMETABLE_LECTURER, TIMETABLE_TIME, a, null, null, null, null);
【问题讨论】:
【参考方案1】:我的 where args 工作示例(使用它更清楚):
String [] settingsProjection =
DBContract.Settings._ID,
DBContract.Settings.COLUMN_NAME_USER_ID,
DBContract.Settings.COLUMN_NAME_AUTO_LOGIN
;
String whereClause = DBContract.Settings.COLUMN_NAME_USER_ID+"=?";
String [] whereArgs = userId.toString();
Cursor c = db.query(
DBContract.Settings.TABLE_NAME,
settingsProjection,
whereClause,
whereArgs,
null,
null,
null
);
【讨论】:
【参考方案2】:db.query
(
TABLE_NAME,
new String[] TABLE_ROW_ID, TABLE_ROW_ONE, TABLE_ROW_TWO ,
TABLE_ROW_ID + "=" + rowID,
null, null, null, null, null
);
TABLE_ROW_ID + "=" + rowID,这里"="是where子句
【讨论】:
这可行,但是我在使用字母时收到错误消息。但如果我使用数字,它会起作用 如果您想使用字符串,您可以将查询触发为 Cursor mCursor = mDb.query(true, CUSTOMER_TABLE_NAME, new String[] GENERIC_ID_KEY,ADDRESS_KEY, PHONE_KEY, MAIL_KEY,CUSTOMER_NAME_KEY, GENERIC_ID_KEY + "=?", new String [] customerDbId, null, null, null, null);【参考方案3】:“仍然不起作用”到底是什么意思?
以下代码应该可以正常工作:
public Cursor fetchTimetable()
String[] columnNames = new String[] TIMETABLE_ROWID, TIMETABLE_MODULECODE, TIMETABLE_MODULENAME, TIMETABLE_ROOM, TIMETABLE_LECTURER, TIMETABLE_TIME;
String whereClause = "TIMETABLE_MODULECODE=123";
return mDb.query(DATABASE_TABLE_TIMETABLE, columnNames, whereClause, null, null, null, null);
【讨论】:
【参考方案4】:正确的语法是
String[] projection= column names;
String[] where="values for where clause"; //this must be array
public Cursor fetchTimetable()
return mDb.query(TABLE_NAME, projrction, "columname"+"=?", where, null, null, null);
【讨论】:
谢谢拉利特,你的代码对我有用。我不知道你为什么不投票。也请附上一些链接【参考方案5】:简单的方法:
return mDb.rawQuery("SELECT * FROM myTable WHERE column1 = "+ someValue, null);
【讨论】:
【参考方案6】:您可以使用使用此查询:
SQLiteDatabase db = this.getReadableDatabase();
//Cursor cursorr = db.rawQuery(Query, null);
Cursor cursorr = db.rawQuery("select * from " + DATABASE_TABLE_EHS + " where " + TASK_ID + "='" + taskid + "'" , null);
if (cursorr.moveToFirst())
do
// your code like get columns
while (cursorr.moveToNext());
【讨论】:
【参考方案7】:如果您要检查字符串值,您需要将字符串用引号括起来,如下所示:
dbHelper.COL_EMAIL +"='"+givenEmail+"'",
【讨论】:
以上是关于SQLiteDatabase - 如何使用 where 子句?的主要内容,如果未能解决你的问题,请参考以下文章
在 SQLiteDatabase.query() 中使用 String[] selectionArgs