Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中非常奇怪的PreparedStatement?_Java_Sql_Jdbc_Prepared Statement - Fatal编程技术网

java中非常奇怪的PreparedStatement?

java中非常奇怪的PreparedStatement?,java,sql,jdbc,prepared-statement,Java,Sql,Jdbc,Prepared Statement,我今天在一个程序中发现了一个非常奇怪的PreparedStatement,用来纠正我收到的一个错误。我找到了一些令人困惑的SQL。现在,我不是SQL或PreparedStatements的大师,但这似乎是非常错误的。我还应该提到,这在同事的计算机上有效,但在我的计算机上无效 static final String SELECT_UNCOMPLETE_TASKS_FOR_UPGRADE = "SELECT i.employeeid, i.taskid, i.itptaskarchivecd, i.

我今天在一个程序中发现了一个非常奇怪的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 myQuery = entityManager.createNativeQuery("select * from my_table where foo = ?1 and bar = ?2");

q.setParameter(1,myFoo);
q.setParameter(2,myBar);

您使用的jdbc驱动程序是什么?出现了什么错误?@Pranalee:ORA-00933:SQL命令没有正确地为您使用同一驱动程序的同事命名?这看起来像某种占位符,稍后将在代码中引用。您确定代码中的其他地方没有使用/修改此变量吗?也许要用作模板来创建实际的语句?如果将其用作传统的PreparedStatement,即ps=conn.prepareStatement(ITPQueryHelperSQL.SELECT_UNCOMPLETE_TASKS_FOR_UPGRADE)@Justin否,除非驱动程序特别支持识别查询参数的非标准(JDBC/SQL未指定)方式。JDBC只支持简单的位置参数(即:
)。