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