English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC ASCII 및 이진 데이터 스트림

PreparedStatement 객체는 입력 및 출력 스트림을 통해 매개변수 데이터를 제공할 수 있습니다. 이를 통해 전체 파일을 CLOB 또는 BLOB 데이터 타입과 같은 큰 값을 저장할 수 있는 데이터베이스 열에 저장할 수 있습니다.

다음과 같은 메서드가 있습니다. 이 메서드는 스트림 데이터를 사용할 수 있습니다.-

  • setAsciiStream(): 이 메서드는 큰 ASCII 값을 제공하는 데 사용됩니다.

  • setCharacterStream(): 이 메서드는 큰 유니코드 값을 제공하는 데 사용됩니다.

  • setBinaryStream(): 이 메서드는 큰 바이너리 값을 제공하는 데 사용됩니다.

setXXXStream () 메서드는 매개변수 대체자 외에도 추가적인 매개변수가 필요합니다. 이 매개변수는 파일 크기를 의미하며, 드라이버가 데이터베이스로 전송해야 할 얼마나 많은 데이터를 사용할지 알려줍니다.

온라인 예제

예를 들어, 우리는 XML 파일 XML_Data.xml을 데이터베이스 테이블에 업로드하고 싶습니다. 이 XML 파일의 내용은 다음과 같습니다-

<?xml version="1.0"?>
<Employee>
<id>100</id>
<first>Zara</first>
<last>Ali</last>
<Salary>10000</Salary>
<Dob>18-08-1978</Dob>
<Employee>

이 XML 파일을 이 예제를 실행할 디렉토리에 두세요.

이 예제는 XML_Data 데이터베이스 테이블을 생성한 후 파일 XML_Data.xml을 테이블에 업로드합니다.

다음 예제를 JDBCExample.java에 복사 및 붙여넣고, 다음과 같이 컴파일 및 실행하세요:

// 필요한 소프트웨어 패키지를 가져옵니다
import java.sql.*;
import java.io.*;
import java.util.*;
public class JDBCExample {
   // JDBC 드라이버 이름과 데이터베이스 URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   //  데이터베이스 인증 정보
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   PreparedStatement pstmt = null;
   Statement stmt = null;
   ResultSet rs = null;
   try{
      // JDBC 드라이버를 등록합니다
      Class.forName("com.mysql.jdbc.Driver");
      // 연결 열기
      System.out.println("데이터베이스에 연결 중...");
      conn = DriverManager.getConnection(DB_URL, USER, PASS);
      //Statement 객체를 생성하고 테이블을 구축합니다
      stmt = conn.createStatement();
      createXMLTable(stmt);
      //FileInputStream를 열기
      File f = new File("XML_Data.xml");
      long fileLength = f.length();
      FileInputStream fis = new FileInputStream(f);
      //PreparedStatement을 생성하고 데이터를 스트림으로 전송합니다
      String SQL = "INSERT INTO XML_Data VALUES (?,?)";
      
      pstmt.setInt(1,10
      pstmt.setAsciiStream(2,fis,(int)fileLength);
      pstmt.execute();
      //입력 스트림을 닫습니다
      fis.close();
      // 행을 가져오기 위해 쿼리를 수행합니다
      SQL = "SELECT Data FROM XML_Data WHERE id="10"0";
      rs = stmt.executeQuery(SQL);
      // 첫 번째 행을 가져옵니다
      if (rs.next()) {
         //입력 스트림에서 데이터를 검색합니다
         InputStream xmlInputStream = rs.getAsciiStream();1);
         int c;
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         while ((c = xmlInputStream.read()) != -1)
            bos.write(c);
         //결과를 출력합니다
         System.out.println(bos.toString());
      }
      // 환경을 정리합니다
      rs.close();
      stmt.close();
      pstmt.close();
      conn.close();
   }catch(SQLException se){
      //JDBC 오류 처리
      se.printStackTrace();
   }
      //Class.forName() 오류 처리
      e.printStackTrace();
   }
      //자원을 닫는 데 사용됩니다
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2{
      }// 우리는 무엇도 할 수 없습니다
      try{
         if(pstmt!=null)
            pstmt.close();
      }catch(SQLException se2{
      }// 우리는 무엇도 할 수 없습니다
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }
   }//try를 종료합니다
   System.out.println("Goodbye!");
}//main을 종료합니다
public static void createXMLTable(Statement stmt) 
   throws SQLException{
   System.out.println("Creating XML_Data table..." )
   //SQL 문장 생성
   String streamingDataSql = "CREATE TABLE XML_Data " +
                             "(id INTEGER, Data LONG)";
   //존재하면 먼저 테이블을 제거합니다.
   try{
      stmt.executeUpdate("DROP TABLE XML_Data");
   }catch(SQLException se){
   }// 무엇도 하지 않았습니다
   //표를 만듭니다.
   stmt.executeUpdate(streamingDataSql);
}//createXMLTable을 종료합니다
}//JDBCExample을 종료합니다

이제 위의 예제를 컴파일해 보겠습니다:

C:\>javac JDBCExample.java
C:\>

실행 중JDBCExample그렇게 하면 다음과 같은 결과가 생성됩니다-

C:\>java JDBCExample
Connecting to database...
Creating XML_Data table...
<?xml version="1.0"?>
<Employee>
<id>100</id>
<first>Zara</first>
<last>Ali</last>
<Salary>10000</Salary>
<Dob>18-08-1978</Dob>
<Employee>
안녕히 가세요!
C:\>