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

如何通过Android SQLiteDatabase 创建SQLite数据库视图?

重新创建活动时出现 SQLiteDatabase 错误

SQLiteDatabase 使用模式 [重复]

SQliteDatabase详解

使用replace函数更新SQLiteDatabase