[SQL] 여러 결과 집합을 반환하는 쿼리
SQL여러 결과 집합을 반환하는 쿼리
나는 MSSQL 데이터베이스가 다음과 같은 쿼리를 실행하고 있습니다 :
select * from projects; select * from user
위의 쿼리 반환 두 개의 결과 집합 한 번에, 나는 별도로 두 쿼리를 해고 할 수 없다. 어떻게 자바 클래스에서 한 번에 결과 집합을 모두 처리 할 수 있습니까?
해결법
-
==============================
1.올바른 코드는 JDBC 문에 의해 반환 된 복수의 ResultSet를 처리하는 :
올바른 코드는 JDBC 문에 의해 반환 된 복수의 ResultSet를 처리하는 :
PreparedStatement stmt = ...; boolean isResultSet = stmt.execute(); int count = 0; while(true) { if(isResultSet) { rs = stmt.getResultSet(); while(rs.next()) { processEachRow(rs); } rs.close(); } else { if(stmt.getUpdateCount() == -1) { break; } log.info("Result {} is just a count: {}", count, stmt.getUpdateCount()); } count ++; isResultSet = stmt.getMoreResults(); }
중요 비트 :
-
==============================
2.당신의 Statement.execute ()의 getResultSet ()를 사용할 수 있습니다;
당신의 Statement.execute ()의 getResultSet ()를 사용할 수 있습니다;
PreparedStatement stmt = ... prepare your statement result boolean hasResults = stmt.execute(); while (hasResults) { ResultSet rs = stmt.getResultSet(); ... your code parsing the results ... hasResults = stmt.getMoreResults(); }
-
==============================
3.그래 넌 할수있어. 이 MSDN 문서를 참조하십시오 https://msdn.microsoft.com/en-us/library/ms378758(v=sql.110).aspx
그래 넌 할수있어. 이 MSDN 문서를 참조하십시오 https://msdn.microsoft.com/en-us/library/ms378758(v=sql.110).aspx
public static void executeStatement(Connection con) { try { String SQL = "SELECT TOP 10 * FROM Person.Contact; " + "SELECT TOP 20 * FROM Person.Contact"; Statement stmt = con.createStatement(); boolean results = stmt.execute(SQL); int rsCount = 0; //Loop through the available result sets. do { if(results) { ResultSet rs = stmt.getResultSet(); rsCount++; //Show data from the result set. System.out.println("RESULT SET #" + rsCount); while (rs.next()) { System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName")); } rs.close(); } System.out.println(); results = stmt.getMoreResults(); } while(results); stmt.close(); } catch (Exception e) { e.printStackTrace(); } }
그 테스트를했는데 그것을 잘 작동합니다.
-
==============================
4.사용 자바 전에 결과 집합 절에서 볼 필요가있다.
사용 자바 전에 결과 집합 절에서 볼 필요가있다.
MSSQL은 더 실용적인 방법으로, 당신의 자바 코드와 함께 당신을 도울 수있는이 기능이 있습니다.
이 예는 두 개의 쿼리를 간부 인 것입니다 :
EXEC('SELECT id_person, name, age FROM dbo.PERSON; SELECT id_url, url FROM dbo.URL;') WITH RESULT SETS ( ( id_person BIGINT, name VARCHAR(255), age TINYINT ), ( id_url BIGINT, url VARCHAR(2000) ) );
당신은뿐만 아니라 결과 집합으로 저장 프로 시저를 사용할 수 있습니다.
상세 정보 : https://technet.microsoft.com/en-us/library/ms188332(v=sql.110).aspx
-
==============================
5.
public static void executeProcedure(Connection con) { try { CallableStatement stmt = con.prepareCall(...); ..... //Set call parameters, if you have IN,OUT, or IN/OUT parameters boolean results = stmt.execute(); int rsCount = 0; //Loop through the available result sets. while (results) { ResultSet rs = stmt.getResultSet(); //Retrieve data from the result set. while (rs.next()) { ....// using rs.getxxx() method to retrieve data } rs.close(); //Check for next result set results = stmt.getMoreResults(); } stmt.close(); } catch (Exception e) { e.printStackTrace(); } }
-
==============================
6.UNION에서 ALL 쿼리는 2 개 이상 "을 선택"쿼리의 결과 집합을 결합 할 수 있습니다. 그것은 (행이 "선택"문 하나 이상 존재하는 경우에도) 모든 행을 반환합니다.
UNION에서 ALL 쿼리는 2 개 이상 "을 선택"쿼리의 결과 집합을 결합 할 수 있습니다. 그것은 (행이 "선택"문 하나 이상 존재하는 경우에도) 모든 행을 반환합니다.
연합 ALL 쿼리 내의 각 SQL 문은 유사한 데이터 유형과 결과 세트의 필드의 같은 번호가 있어야합니다 .........
select * from projects UNION ALL select * from user
-
==============================
7.답 : 그것은 불가능합니다. 유일한 방법 : 별도의 쿼리로를 실행합니다.
답 : 그것은 불가능합니다. 유일한 방법 : 별도의 쿼리로를 실행합니다.
from https://stackoverflow.com/questions/9696572/queries-returning-multiple-result-sets by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] "당신은 지정된 집계 함수를 포함하지 않는 쿼리를 실행하려고" (0) | 2020.05.03 |
---|---|
[SQL] 왜 하나의 SELECT에서 집계 값과 비 집계 값을 혼합 할 수 없습니다? (0) | 2020.05.03 |
[SQL] SQL에서 주 번호를 추출하는 방법 (0) | 2020.05.03 |
[SQL] MySQL의에서 INNODB을 가능하게하는 방법 (0) | 2020.05.03 |
[SQL] 값이 오라클에 숫자가 아닌 경우 어떻게 알 수 있습니까? (0) | 2020.05.03 |