在android上构建预准备语句后获取原始SQL查询

时间:2015-05-20 19:34:26

标签: android sqlite

我正在制作Android应用并使用SQLite数据库。特别是我在通过rawQuery获得的数据库上使用SQLiteOpenHelper方法。我构建的查询使用?标记作为实际值的占位符,它们作为对象数组传递(例如,select * from table where id = ?)。

问题是,是否可以使用已经替换的标记来获取查询,至少从rawQuery方法返回的游标中获取?我的意思是select * from table where id = 56。这对于调试目的很有用。

2 个答案:

答案 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);