我正在制作Android应用并使用SQLite数据库。特别是我在通过rawQuery
获得的数据库上使用SQLiteOpenHelper
方法。我构建的查询使用?
标记作为实际值的占位符,它们作为对象数组传递(例如,select * from table where id = ?
)。
问题是,是否可以使用已经替换的标记来获取查询,至少从rawQuery
方法返回的游标中获取?我的意思是select * from table where id = 56
。这对于调试目的很有用。
答案 0 :(得分:2)
这是不可能的。 ?
值不是在SQL级别绑定,而是更深层次,并且没有"结果"绑定值后的SQL。
变量绑定是sqlite3 C API的一部分,而Android SQLite API只是在顶部提供了一个瘦包装器。 http://sqlite.org/c3ref/bind_blob.html
出于调试目的,您可以使用?
记录SQL,并记录绑定参数的值。
答案 1 :(得分:0)
您可以将其形成为像这样的字符串
int id = 56;
String query = "select * from table where id = '" + id + "'";
然后将它用作这样的rawQuery(如果我理解你的问题)
Cursor mCursor = mDb.rawQuery(query, null);
您也可以使用SQLiteQueryBuilder。以下是连接查询的示例:
//Create new querybuilder
SQLiteQueryBuilder _QB = new SQLiteQueryBuilder();
//Specify books table and add join to categories table (use full_id for joining categories table)
_QB.setTables(BookColumns.TABLENAME +
" LEFT OUTER JOIN " + CategoryColumns.TABLENAME + " ON " +
BookColumns.CATEGORY + " = " + CategoryColumns.FULL_ID);
//Order by records by title
_OrderBy = BookColumns.BOOK_TITLE + " ASC";
//Open database connection
SQLiteDatabase _DB = fDatabaseHelper.getReadableDatabase();
//Get cursor
Cursor _Result = _QB.query(_DB, null, null, null, null, null, _OrderBy);