rawQuery(查询,selectionArgs)
Posted
技术标签:
【中文标题】rawQuery(查询,selectionArgs)【英文标题】:rawQuery(query, selectionArgs) 【发布时间】:2012-05-22 19:28:27 【问题描述】:我想使用选择查询从表中检索数据。我发现,rawQuery(query, selectionArgs)
类的 rawQuery(query, selectionArgs)
方法可以检索数据。但是我不知道query
和selectionArgs
应该如何传递给rawQuery
方法?
【问题讨论】:
android developer websiteAndroid 开发者是所有这些小查询的最佳来源 是所有这些小查询的最佳来源 【参考方案1】:rawQuery("SELECT id, name FROM people WHERE name = ? AND id = ?", new String[] "David", "2");
你传递一个字符串数组,它的元素数量与你的 "?" 相同
【讨论】:
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] "column_name", "David");
,这是一个有效的查询吗?
@theapache64 这不是一个有效的查询。这 '?'仅适用于值。【参考方案2】:
也许这对你有帮助
Cursor c = db.rawQuery("query",null);
int id[] = new int[c.getCount()];
int i = 0;
if (c.getCount() > 0)
c.moveToFirst();
do
id[i] = c.getInt(c.getColumnIndex("field_name"));
i++;
while (c.moveToNext());
c.close();
【讨论】:
【参考方案3】:rawQuery 的一个示例 - db.rawQuery("select * from table where column = ?",new String[]"data");
【讨论】:
什么是新字符串[]"data"?你能解释一下上面的说法吗?提前致谢。 developer.android.com/reference/android/database/sqlite/…【参考方案4】:请参阅下面的代码,它可能会对您有所帮助。
String q = "SELECT * FROM customer";
Cursor mCursor = mDb.rawQuery(q, null);
或
String q = "SELECT * FROM customer WHERE _id = " + customerDbId ;
Cursor mCursor = mDb.rawQuery(q, null);
【讨论】:
为什么投票赞成?这没有说明如何正确使用rawQuery
提供的功能。其目的是避免连接字符串等。此外,应该接受 Rawkode 的回答。
这不是 rawQuery 应该使用的方式,你应该使用 ?作为占位符和填充它们的第二个参数。
无论您应该“如何”使用 rawQuery(),在除 Java 之外的所有其他语言中,这都是更明智、更简短、更易于理解和更标准的方式。所以这是首选。
@aMiGo 该字符串无论如何都会连接到下面的图层。
如果你连接一个字符串值,你会遇到字符 ' (字符串中需要 2 个)和字符 ; (可能会产生副作用)。假设 CustomerDbId 是一个字符串,内容为 -- '123';从客户那里删除——然后你会丢失所有数据!【参考方案5】:
如果你的 SQL 查询是这样的
SELECT id,name,roll FROM student WHERE name='Amit' AND roll='7'
那么 rawQuery 将是
String query="SELECT id, name, roll FROM student WHERE name = ? AND roll = ?";
String[] selectionArgs = "Amit","7"
db.rawQuery(query, selectionArgs);
【讨论】:
【参考方案6】:为了完整性和正确的资源管理:
ICursor cursor = null;
try
cursor = db.RawQuery("SELECT * FROM " + RECORDS_TABLE + " WHERE " + RECORD_ID + "=?", new String[] id + "" );
if (cursor.Count > 0)
cursor.MoveToFirst();
return GetRecordFromCursor(cursor); // Copy cursor props to custom obj
finally // IMPORTANT !!! Ensure cursor is not left hanging around ...
if(cursor != null)
cursor.Close();
【讨论】:
【参考方案7】:String mQuery = "SELECT Name,Family From tblName";
Cursor mCur = db.rawQuery(mQuery, new String[]);
mCur.moveToFirst();
while ( !mCur.isAfterLast())
String name= mCur.getString(mCur.getColumnIndex("Name"));
String family= mCur.getString(mCur.getColumnIndex("Family"));
mCur.moveToNext();
姓名和家庭是你的结果
【讨论】:
以上是关于rawQuery(查询,selectionArgs)的主要内容,如果未能解决你的问题,请参考以下文章
调用database.rawQuery时的Android SQLiteMisuseException
sqlite数据库怎么进行多表连接查询,表之间有相同的字段,除了改字段名称,还有啥办法吗
Android SQLite:哪个查询(“query”或“rawQuery”)更快?