2014-07-01 17 views
6

Znalazłem bardzo dziwne PreparedStatement w dzisiejszym programie do błędu, który otrzymałem. Wyszukałem to i znalazłem kłopotliwy kod SQL. Teraz nie jestem mistrzem SQL ani PreparedStatements, ale wydaje się to bardzo błędne. Powinienem też wspomnieć, że działa to na komputerze współpracownika, ale nie na moim.Bardzo dziwne PreparedStatement w java?

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

Moje pytanie jest proste, jakie są liczby po symbolach zastępczych parametrów (znaki zapytania)? Jeśli jest to całkowicie niepoprawna składnia, co pozwoliłoby jej pracować w innym obszarze roboczym/środowisku? Każda pomoc będzie bardzo ceniona. Dzięki.

+2

jakiego sterownika jdbc używasz? – Andreas

+1

jaki jest błąd, który dostajesz? – Pranalee

+0

@Andreas: Ojdbc6.jar – Justin

Odpowiedz

5

Ta szczególna składnia wygląda na specyficzną dla składni JPA. W JPA można podać? #, Aby określić indeks parametru za pośrednictwem obiektu zapytania.

Query myQuery = entityManager.createNativeQuery("select * from my_table where foo = ?1 and bar = ?2"); 

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

Czy nadal miałoby to miejsce, gdyby było używane jako tradycyjne PreparedStatement, tj. Ps = conn.prepareStatement (ITPQueryHelperSQL.SELECT_UNCOMPLETE_TASKS_FOR_UPGRADE) ;? – Justin

+1

@Justin Nie, chyba że sterownik obsługuje specjalnie niestandardowy (nie określony przez JDBC/SQL) sposób identyfikowania parametrów zapytania. JDBC ** only ** obsługuje proste parametry pozycyjne (np .: '?'). –

Powiązane problemy