java - 如何为此查询编写准备好的语句?

标签 java android sqlite prepared-statement

您好,我已经为我的应用程序及其工作编写了一个连接查询。我的下一个要求是将该查询转换为我陷入困境的准备好的语句。

"SELECT * FROM " + TableA.TABLE + " as d LEFT JOIN " + TableB.TABLE + " as c ON d."+ TableA.DAMAGECODE + "=c." + TableB.DAMAGECODE + " AND d."
+ TableA.INDEX + "=c." + TableB.DAMAGECODEINDEX + " AND d."
+ TableA.OBJECTTYPE + "=c." + TableB.OBJECTCLASS + " WHERE d."+ TableA.LEAF + " = '1' AND d." + TableA.OBJECTTYPE + " = ? AND " + "(d."+ TableA.DAMAGECODE + " LIKE ? OR d." + TableA.DAMAGETEXT + " LIKE ?) AND c." + TableB.CONSTRUCTIONSERIES + " = ? ORDER BY " + TableA.DAMAGETEXT;

cursor = db.rawQuery(sql,new String[]{String.valueOf(objectClass),"'%" + query + "%'","'%" + query + "%'",constructionSeries});

当我运行原始查询时,我得到结果,但是当运行上述准备好的语句时,我得到的游标计数始终为零

最佳答案

您不需要添加 '当您经过 String 时,您自己参数,PreparedStatement将自行管理这些。

"'%" + query + "%'"

目前您的情况是这样的

where columnA = "'%somethingToFind%'"

所以除非你有 columnA 的值喜欢 'somethingToFindInColumnA' (请注意 String 开头和结尾的引用)。你永远不会得到结果。

删除这些以获得类似的内容:

"%" + query + "%"

完整答案:

db.rawQuery(sql,new String[]{String.valueOf(objectClass),"'%" + query + "%'","'%" + query + "%'",constructionSeries});

成为:

db.rawQuery(sql,new String[]{String.valueOf(objectClass),"%" + query + "%","%" + query + "%",constructionSeries});

关于java - 如何为此查询编写准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50326890/

相关文章:

java - 尝试使用 fragment 中的 Bundle 调用虚拟方法 java.util.ArrayList

java - 只允许使用 Android SQLite 输入唯一数据?

ios - 通过sqlite查询Core Data数据库安全吗

java - Phonegap/Android (java) - 移动预先填充的 SQLite 数据库 + Assets 文件夹

java - 通过 Sybase Jconnect JDBC 驱动程序获取与 DBCP 的连接

java - Android BLE - 自定义线程是否从 GattCallback 方法开始和完成最终被垃圾收集?

java - 除 hibernate-validator 之外的 Jersey Bean 验证

java - Android fragment : How to work with views on other layouts?

Android:在服务内的 TimerTask 中实例化处理程序

android - 最近的应用程序查看访问