2014-07-01 16 views
6

我今天在程序中發現了一個非常奇怪的PreparedStatement,這個錯誤是我收到的。我追查下來,發現一些令人困惑的SQL。現在,我不是SQL或PreparedStatements的主人,但這看起來很錯誤。我還應該提到,這適用於同事的計算機,但不適用於我的計算機。在java中很怪異的PreparedStatement?

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

我的問題很簡單,參數佔位符(問號)之後的數字是什麼?如果這完全是不正確的語法,什麼可以讓它在另一個工作區/環境中工作?任何和所有的幫助將不勝感激。謝謝。

+2

您使用的是什麼jdbc驅動程序? – Andreas

+1

你得到的錯誤是什麼? – Pranalee

+0

@Andreas:Ojdbc6.jar – Justin

回答

5

該特定語法看起來特定於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); 
+0

如果將它作爲傳統的PreparedStatement使用,例如ps = conn.prepareStatement(ITPQueryHelperSQL.SELECT_UNCOMPLETE_TASKS_FOR_UPGRADE);? – Justin

+1

@Justin否,除非驅動程序特別支持標識查詢參數的非標準(不是由JDBC/SQL指定的)方式。僅JDBC **支持簡單的位置參數(即:'?')。 –