web-dev-qa-db-de.com

So verwenden Sie eine Arrayliste als vorbereiteten Anweisungsparameter

Ich habe nachgesehen und konnte keine Antwort auf die folgende Herausforderung finden, die ich habe. Es scheint ziemlich einfach zu sein, aber ich konnte es nicht lösen.

Ich habe ein ArrayList von Datensatz-IDs, die vom Typ Long -> ArrayList<Long> Sind. Ich möchte diese Liste der Datensatz-IDs verwenden, um Zeilen aus einer anderen Tabelle auszuwählen. So weit, ist es gut. Nun zur Herausforderung ...

a) Ich verwende eine vorbereitete Anweisung, um die Daten aus einer Tabelle mit dem ArrayList als Eingabe für diese auszuwählen.

selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");

Frage zu obigem - wie soll der Parameter definiert werden? Das Obige scheint für einen Parameter vom Typ ArrayList nicht korrekt zu sein.

b) Ich habe auch Probleme, wenn ich den Wert des Parameters für die vorbereitete Anweisung festlege. Es gibt keine Methode zum Festlegen eines Werts vom Typ ArrayList, und ich sehe keine anderen realisierbaren Optionen.

---> selectPS.set?????(1, arraylistParameter);
     ResultSet rs = selectPS.executeQuery(); 

Jede Hilfe oder Anweisung, die Sie mir geben können, wird sehr geschätzt.

Vielen Dank.

30
Thomas Grady

Möglicherweise möchten Sie die setArray -Methode verwenden, wie im folgenden Javadoc beschrieben:

http://docs.Oracle.com/javase/6/docs/api/Java/sql/PreparedStatement.html#setArray (int, Java.sql.Array)

Beispielcode:

PreparedStatement pstmt = 
                conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
52
Yogendra Singh

Wenn Sie ArrayList haben, konvertieren Sie in Array [Object]

ArrayList<String> list = new ArrayList<String>();
PreparedStatement pstmt = 
            conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", list.toArray());
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
22
Amit Dubey