我今天在程序中发现一个非常奇怪的PreparedStatement,它对收到的错误起作用。我对其进行了跟踪,发现了一些令人困惑的SQL。现在,我不是SQL或PreparedStatements的主人,但这似乎很不对劲。我还应该提到,这可以在同事的计算机上工作,而不能在我的计算机上工作。
static final String SELECT_UNCOMPLETE_TASKS_FOR_UPGRADE =
"SELECT i.employeeid, i.taskid, i.itptaskarchivecd, i.itptaskstartdt, i.itptaskcompletiondt,t.taskobsoletecd, "
+ "t.taskknowledgetx, t.taskProductid, t.taskrfrncid, t.taskcorecd, t.taskwartimecd, t.parentheaderid, "
+ "t.taskparentindcd, i.itptaskstatuscd, i.itptaskarchivedt, t.certified "
+ "FROM itptask i,task t "
+ "WHERE (i.itptaskcompletiondt is NULL "
+ "AND i.employeeid = ?1 "
+ "AND i.taskid = t.taskid "
+ "AND i.itptaskarchivecd = ?2 "
+ "AND t.taskproductcd = ?3 "
+ "AND t.taskobsoletecd = ?4 "
+ "AND t.taskcorecd = ?5) "
+ "OR (i.employeeid = ?6 "
+ "AND i.taskid = t.taskid "
+ "AND 'T' = t.taskparentindcd "
+ "AND t.taskproductcd = ?7)";
我的问题很简单,参数占位符(问号)后的数字是什么?如果这是完全不正确的语法,那么它将如何在另一个工作空间/环境中工作?任何和所有帮助将不胜感激。谢谢。
最佳答案
该特定语法似乎特定于JPA语法。在JPA中,您可以指定?#以通过Query对象指定参数索引。
Query myQuery = entityManager.createNativeQuery("select * from my_table where foo = ?1 and bar = ?2");
q.setParameter(1,myFoo);
q.setParameter(2,myBar);
关于java - Java非常奇怪的PreparedStatement吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24518052/