복붙노트

[SQL] 여러 결과 집합을 반환하는 쿼리

SQL

여러 결과 집합을 반환하는 쿼리

나는 MSSQL 데이터베이스가 다음과 같은 쿼리를 실행하고 있습니다 :

select * from projects; select * from user

위의 쿼리 반환 두 개의 결과 집합 한 번에, 나는 별도로 두 쿼리를 해고 할 수 없다. 어떻게 자바 클래스에서 한 번에 결과 집합을 모두 처리 할 수 ​​있습니까?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    6.UNION에서 ALL 쿼리는 2 개 이상 "을 선택"쿼리의 결과 집합을 결합 할 수 있습니다. 그것은 (행이 "선택"문 하나 이상 존재하는 경우에도) 모든 행을 반환합니다.

    UNION에서 ALL 쿼리는 2 개 이상 "을 선택"쿼리의 결과 집합을 결합 할 수 있습니다. 그것은 (행이 "선택"문 하나 이상 존재하는 경우에도) 모든 행을 반환합니다.

    연합 ALL 쿼리 내의 각 SQL 문은 유사한 데이터 유형과 결과 세트의 필드의 같은 번호가 있어야합니다 .........

    select * from projects
    UNION ALL
    select * from user
    
  7. ==============================

    7.답 : 그것은 불가능합니다. 유일한 방법 : 별도의 쿼리로를 실행합니다.

    답 : 그것은 불가능합니다. 유일한 방법 : 별도의 쿼리로를 실행합니다.

  8. from https://stackoverflow.com/questions/9696572/queries-returning-multiple-result-sets by cc-by-sa and MIT license