如何在Android应用程序中执行SQLite查询?


68

我试图在我的Android数据库上使用此查询,但是它不返回任何数据。我想念什么吗?

SQLiteDatabase db = mDbHelper.getReadableDatabase();
    String select = "Select _id, title, title_raw from search Where(title_raw like " + "'%Smith%'" +
    ")";        
    Cursor cursor = db.query(TABLE_NAME, FROM, 
            select, null, null, null, null);
    startManagingCursor(cursor);
    return cursor;

尝试此操作以获取正确的查询。stackoverflow.com/a/17925238/6125132
Faruk Ahmed

Answers:


111

这将返回您所需的光标

Cursor cursor = db.query(TABLE_NAME, new String[] {"_id", "title", "title_raw"}, 
                "title_raw like " + "'%Smith%'", null, null, null, null);

3
null如果您希望where条件为“一切”,您是否只是通过?
马特·哈金斯

2
@Matt:是的,只需在没有位置的地方传递null即可
Noah

为了改善缓存,您可以将选择和选择参数分开,如下所示:..., "title_raw like ?", new String[]{"'%Smith%'"}, ...。资料来源:android文档
sulai 2013年

@sulai SQLiteDatabase和ContentResolver之间的连接在哪里?到SQLite的链接是:developer.android.com/reference/android/database/sqlite / ...那里他们什么都没有说关于缓存。我认为应该针对SQL注入使用单独的参数。我认为,否则它们不是很重要。
令人难以置信的

57

或者,存在db.rawQuery(sql,selectionArgs)。

Cursor c = db.rawQuery(select, null);

27

如果要匹配的模式是变量,这也将起作用。

dbh = new DbHelper(this);
        SQLiteDatabase db = dbh.getWritableDatabase();
        Cursor c = db.query("TableName", new String[]{"ColumnName"}
        , "ColumnName LIKE ?" ,new String[]{_data+"%"}, null, null, null);
        while(c.moveToNext())
        {
            // your calculation goes here
        }

12

我来这里提醒的是如何设置查询,但是现有示例很难理解。这是一个带有更多说明的示例。

SQLiteDatabase db = helper.getReadableDatabase();

String table = "table2";
String[] columns = {"column1", "column3"};
String selection = "column3 =?";
String[] selectionArgs = {"apple"};
String groupBy = null;
String having = null;
String orderBy = "column3 DESC";
String limit = "10";

Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);

参量

  • table:要查询的表的名称
  • columns:要返回的列名。不要返回不需要的数据。
  • selection:要从列中返回的行数据(这是WHERE子句。)
  • selectionArgs:这代替了上面?selection字符串中的。
  • groupByand having:这会将重复的数据分组到具有特定条件的列中。可以将任何不需要的参数设置为null。
  • orderBy:对数据进行排序
  • limit:限制返回的结果数

1

试试这个,这对于我的代码名是一个字符串:

cursor = rdb.query(true, TABLE_PROFILE, new String[] { ID,
    REMOTEID, FIRSTNAME, LASTNAME, EMAIL, GENDER, AGE, DOB,
    ROLEID, NATIONALID, URL, IMAGEURL },                    
    LASTNAME + " like ?", new String[]{ name+"%" }, null, null, null, null);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.