2015-08-25 16 views
6

Sto cercando di ottenere ParameterMetaData da un oggetto java.sql.PreparedStatement.PreparedStatement.getParameterMetaData() genera ArrayIndexOutOfBoundsException quando si dispone di commenti e parametri all'interno di sql-string

Mentre la documentazione dice che il lancio di un SQLException quando qualcosa va storto sul database, attualmente sto ricevendo un ArrayIndexOutOfBoundsException.

Sto usando questo URL driver JDBC: oracle.jdbc.driver.OracleDriver Ho un ojdbc6.jar e una a 64 bit JDK 1.6.0.45 in uso.

sto facendo quanto segue:

PreparedStatement stmt = myOracleConn.prepareStatement(sql); 
preparedStatements.add(stmt); 
ParameterMetaData bla2 = stmt.getParameterMetaData(); //this Line throws the Exception 

ho scoperto che questo accade solo, quando uso un commento all'interno del sql-String.

Così, quando il mio SQL è:

1) (nessun commento, ma parametro)

"SELECT * FROM DUAL WHERE 1 = ?" --> no error occurs 

2) (commento e parametri)

"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = ?" --> the indexoutofbounds exception occurs 

3) (commento, ma non parametro)

"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = 1" --> no error occurs 

I wonde r se è così e non devo usare commenti all'interno dei miei sql o se mi manca qualcosa ... Qualcuno sa qualcosa su questo?

edit1: L'utilizzo di --comments invece di/**/restituisce lo stesso comportamento. EDIT2: sembra non a tutti, ho un grande SQL che ha incluso

\n\t\t\t\t--great 

che ottiene l'eccezione. Quando si inserisce questo sopra del campione sqls ancora, funzionerà

Se mi mancano alcune informazioni, basta richiederlo. Grazie in anticipo.

+0

Sembra che hai appena trovato un bug nel driver JDBC Oracle. D'altra parte, non penso che i driver JBDC siano pronti a ricevere commenti Java all'interno della query ... – ericbn

+4

SQL standard non supporta quel tipo di commenti. Solitamente supporta solo commenti a una riga che iniziano con '--' (e, ovviamente, non è possibile inserirli all'inizio della riga). Ma perché dovresti inserire commenti nelle stringhe SQL piuttosto che nel programma che li esegue? – RealSkeptic

+1

e che dire dell'uso dei suggerimenti? sono codificati come commenti, anche modifica: io uso i commenti in sql perché sql è immesso da extern e i commenti descrivono le sql non le routine java – Kaspatoo

risposta

0

Sei dovrebbe impostare parametri per l'istruzione prima di eseguire .getParameterMetaData()

PreparedStatement stmt = myOracleConn.prepareStatement(sql); 
stmt.setString(1,"test"); 
ParameterMetaData metadata = stmt.getParameterMetaData(); 
+0

Non lo dice nel Javadoc. Dice 'Per alcune query e implementazioni di driver, i dati che verrebbero restituiti da un oggetto 'ParameterMetaData' potrebbero non essere disponibili fino a quando non è stato eseguito' PreparedStatement', ma sembra che non si applichi qui. – EJP

+0

Beh ... prova a riportare i risultati ... –

Problemi correlati