2014-07-01 16 views
6

Ho trovato che un PreparedStatement molto strano in un programma oggi fa un errore che ho ricevuto. L'ho rintracciato e ho trovato alcuni SQL perplessi. Ora, non sono un maestro di SQL o di PreparedStatements, ma questo sembra molto sbagliato. Dovrei anche menzionare che questo funziona sul computer di un collega, ma non sul mio.Stranamente preparatoStato in 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)"; 

La mia domanda è semplice, quali sono i numeri dopo i segnaposto dei parametri (punti interrogativi)? Se questa sintassi è completamente errata, cosa gli permetterebbe di lavorare in un altro ambiente di lavoro/ambiente? Ogni tipo di aiuto sarà enormemente apprezzato. Grazie.

+2

quale driver jdbc stai usando? – Andreas

+1

Qual è l'errore che ottieni? – Pranalee

+0

@Andreas: Ojdbc6.jar – Justin

risposta

5

Questa particolare sintassi sembra essere specifica della sintassi JPA. In JPA, è possibile specificare? # Per specificare l'indice dei parametri tramite un oggetto Query.

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

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

Questo sarebbe ancora il caso se fosse usato come un tradizionale PreparedStatement i.e. ps = conn.prepareStatement (ITPQueryHelperSQL.SELECT_UNCOMPLETE_TASKS_FOR_UPGRADE) ;? – Justin

+1

@Justin No, a meno che il driver non supporti specificamente un modo non standard (che non è specificato da JDBC/SQL) per identificare i parametri di query. Solo JDBC ** supporta semplici parametri posizionali (es: '?'). –

Problemi correlati