복붙노트

[SQL] 당신은 어떻게 JDBC에 ResultSet.getBinaryStream ()를 사용하여 모든 열에서 값을받을 수 있나요?

SQL

당신은 어떻게 JDBC에 ResultSet.getBinaryStream ()를 사용하여 모든 열에서 값을받을 수 있나요?

어떻게 JDBC를 사용하여 플랫 파일 (텍스트 파일)에 전체 테이블을 작성합니까? 지금까지 나는 다음을 시도했습니다 :

Statement statement = connection.createStatement();
   ResultSet result = statement.executeQuery("SELECT * FROM tablename");
   BufferedInputStream buffer;
   FileOutputStream out = new FileOutputStream("flatfile.txt");
   while(result.next() )
   {
      buffer =  new BufferedInputStream(result.getBinaryStream("????") );
      byte[] buf = new byte[4 * 1024]; //4K buffer
      int len;
      while( (len = buffer.read(buf, 0, buf.length) ) != -1 )
      {
          out.write(buf, 0, len );
      }
   }
   out.close();

"????" 그냥 내 자리 표시 자입니다. 나는 인수로 전달하는 것에 붙어입니다.

해결법

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

    1.아래의 코드를 사용하여 모든 당신의 테이블에서 열 이름과 전체 데이터를 얻을 수 있습니다. (즉, 분명 충분하지 경우 :)) writeToFile 방법은 파일을 작성하는 로직을 포함합니다

    아래의 코드를 사용하여 모든 당신의 테이블에서 열 이름과 전체 데이터를 얻을 수 있습니다. (즉, 분명 충분하지 경우 :)) writeToFile 방법은 파일을 작성하는 로직을 포함합니다

        ResultSetMetaData metadata = rs.getMetaData();
        int columnCount = metadata.getColumnCount();    
        for (int i = 1; i <= columnCount; i++) {
            writeToFile(metadata.getColumnName(i) + ", ");      
        }
        System.out.println();
        while (rs.next()) {
            String row = "";
            for (int i = 1; i <= columnCount; i++) {
                row += rs.getString(i) + ", ";          
            }
            System.out.println();
            writeToFile(row);
    
        }
    
  2. ==============================

    2.예를 들어 DB : 여기 (HSQL 예) 메모리에있는 모든 행을보고 싶다면 내가 디버깅을 위해, JDBC 연결에서 매우 유용 테이블을 덤프 방법은 다음과 같습니다

    예를 들어 DB : 여기 (HSQL 예) 메모리에있는 모든 행을보고 싶다면 내가 디버깅을 위해, JDBC 연결에서 매우 유용 테이블을 덤프 방법은 다음과 같습니다

      public static void spitOutAllTableRows(String tableName, Connection conn) {
        try {
          System.out.println("current " + tableName + " is:");
          try (PreparedStatement selectStmt = conn.prepareStatement(
                  "SELECT * from " + tableName, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
               ResultSet rs = selectStmt.executeQuery()) {
            if (!rs.isBeforeFirst()) {
              System.out.println("no rows found");
            }
            else {
              while (rs.next()) {
                for (int i = 1; i < rs.getMetaData().getColumnCount() + 1; i++) {
                  System.out.print(" " + rs.getMetaData().getColumnName(i) + "=" + rs.getObject(i));
                }
                System.out.println("");
              }
            }
          }
        }
        catch (SQLException e) {
          throw new RuntimeException(e);
        }
      }
    

    출력 같다

     current <yourtablename> is:
     ID=1 COLUMN1=abc COLUMN2=null
     ID=2 COLUMN1=def COLUMN2=ghi
     ...
    
  3. ==============================

    3.당신이 자리로 넣어 result.getBinaryStream는 ( "????") 해당 열에 대한 값을 반환합니다.

    당신이 자리로 넣어 result.getBinaryStream는 ( "????") 해당 열에 대한 값을 반환합니다.

    모든 열을 얻고 싶은 경우에, 당신의 ResultSet에서 ResultSetMetaData에를 사용해야합니다

        ResultSetMetaData metadata = resultSet.getMetaData();
        int columnCount = metadata.getColumnCount();
        for (int i=1; i<=columnCount; i++) 
        {
            String columnName = metadata.getColumnName(i);
            System.out.println(columnName);
        }
    
  4. from https://stackoverflow.com/questions/24943894/how-do-you-get-values-from-all-columns-using-resultset-getbinarystream-in-jdbc by cc-by-sa and MIT license