2014-10-20 1 views
2

У меня есть 2 запроса, и поэтому 2 ResultSet возвращается из MySQL на Java через createStatement(). Запросы, какПолучить следующий ResultSet в JDBC

SELECT * FROM abc; 
SELECT * FROM def; 

Эти запросы выполняются одновременно в одном createStatement() как

CreateConnection(); 
Statement stat = conn.createStatement(); 
ResultSet rs = stat.executeQuery("select * from ABC; select * from DEF;"); 
while(rs.next()) { 
    //Iterate through first resultset 
} 
rs.close(); 
stat.close(); 
conn.close(); 

Как я могу получить следующий ResultSet возвращенное второго запроса?

+4

Почему бы вам не просто сделать 2 заявления/запросы? – ControlAltDel

+0

@getlost не будет делать соединение и возвращает n^2 строки, а не 2n? – ControlAltDel

+0

@ControlAltDel да я просто забыл его –

ответ

2

Используйте Statement#getMoreResults и Statement#getResultSet методы:

ResultSet rs = stat.executeQuery("select * from ABC; select * from DEF;"); 
while(rs.next()) { 
    //Iterate through first resultset 
} 
rs.close(); 
if (stat.getMoreResults()) { 
    rs = stat.getResultSet(); 
    while(rs.next()) { 
     //Iterate through second resultset 
    } 
} 
stat.close(); 

Для того, чтобы сделать этот метод, чтобы работать, вы должны добавить allowMultiQueries=true свойство подключения путем добавления этого свойства вашего подключения URL:

String url = "jdbc:mysql://yourServer:yourPort/yourDatabase?allowMultiQueries=true"; 

Обратите внимание, что вы можете выполнять несколько запросов на Statement с использованием одного Connection ob ject:

Connection con = ... 
List<String> sqlStatements = ... //a list with all the SELECT statements you have 
for (String query : sqlStatements) { 
    Statement stmt = con.createStatement(); 
    ResultSet rs = stmt.executeQuery(query); 
    while (rs.next()) { 
     //do your logic here... 
    } 
    rs.close(); 
    stmt.close(); 
} 
conn.close(); 
+2

Ваш первый метод не работает, а другой - закрытие результатов ** (rs.close();) **, а затем попытка получить другой набор результатов из того же объекта из rs. –

+1

@JavaDrunk: Даже при получении _another_ ResultSet через 'Statement.getResultSet()' предыдущий должен быть закрыт должным образом. И первый метод работает - по крайней мере, в MySQL, который использует OP. –

+0

Спасибо Луиджи, который отлично поработал. –