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

Java 如何为此查询编写准备好的语句?,java,android,sqlite,prepared-statement,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 + "

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

"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});

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

您不需要自己添加
当您传递
字符串
参数时,
PreparedStatement
将自己管理这些参数

"'%" + query + "%'"
目前你的情况是这样的

where columnA = "'%somethingToFind%'"
因此,除非您在
列a
中有一个值,比如
'somethingToFindInColumnA'
(请注意
字符串开头和结尾的引号)。你永远不会有结果

移除这些,以获得类似以下内容:

"%" + query + "%"
完整答案:

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

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

为了我的考虑,你能提出一个简化的
字符串
,而不需要这些连接吗?类似于
Select*from FOOBAR where id=?
不清楚您在这里不能做什么。是的,工作很有魅力。非常感谢。您节省了我的时间。干杯