Ho cercato e non sono riuscito a trovare una risposta alla seguente sfida che sto avendo. Lo sembra piuttosto semplice ma non sono stato in grado di risolverlo.Come utilizzare un arraylist come parametro di istruzione preparato
Possiedo un ArrayList
di ID record di tipo Long
->ArrayList<Long>
. Vorrei utilizzare questo elenco di ID record per selezionare le righe da un'altra tabella. Fin qui tutto bene. Ora sulla sfida ...
a) Sto usando una dichiarazione preparata per selezionare i dati da una tabella utilizzando il ArrayList
come input per questo.
selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");
Domanda su quanto sopra: come deve essere definito il parametro? Quanto sopra non sembra corretto per un parametro di tipo ArrayList
.
b) Si verificano anche problemi durante l'impostazione del valore del parametro per l'istruzione preparata. Non esiste un metodo per impostare un valore di tipo ArrayList
e non vedo altre valide opzioni .
---> selectPS.set?????(1, arraylistParameter);
ResultSet rs = selectPS.executeQuery();
Qualsiasi aiuto o direzione in cui mi puoi iscrivere è molto apprezzato.
Grazie.
** Puoi provare a passare un array? **, [PreparedStatement # setArray()] (http://docs.oracle.it/javase/7/docs/api/java/sql/PreparedStatement.html # setArray (int, java.sql.Array))? È necessario creare prima un array usando [Connection # createArrayOf()] (http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#createArrayOf (java.lang.String, java.lang.Object [])). Ci sono alcuni modi elencati [qui] (http://www.javaranch.com/journal/200510/Journal200510.jsp#a2). – NINCOMPOOP
Creerei dinamicamente una stringa con un '?' Per ogni elemento dell'array, chiamiamo il metodo 'setLong' con ogni valore, incrementando l'indice ogni volta. –
@Thomas Grady CBIP Qual è il tuo database? Se è Oracle, non supporterà più di 1000 record nella clausola 'IN'. Devi scrivere la clausola JOIN INNER più informazioni - http://stackoverflow.com/questions/4722220/sql-in-clause-1000- item-limit – Prabhaker