CLOB는 일반적으로 Character Large Object의 약자이며 SQL Clob은 내장 데이터 유형이며 많은 양의 텍스트 데이터를 저장하는 데 사용됩니다. 이 데이터 유형을 사용하여 최대 2,147,483,647자까지 데이터를 저장할 수 있습니다.
java.sql.Clob JDBC API의 인터페이스는 CLOB 데이터 유형을 나타냅니다. JDBC의 Clob 개체는 SQL locator를 사용하여 구현되므로 데이터가 아닌 SQL CLOB에 대한 논리적 포인터를 보유합니다.
MYSQL 데이터베이스는 4개의 변수를 사용하여 이 데이터 유형을 지원합니다.
-
TINYTEXT: 최대 28-1(255)자의 CLOB 유형입니다.
-
텍스트: 최대 216-1(65535)자의 CLOB 유형입니다.
-
중간 텍스트: 최대 224-1(16777215)자의 CLOB 유형입니다.
-
장문: 최대 232-1(4294967295 )자의 CLOB 유형입니다.
데이터베이스의 totable에 Clob 데이터 유형 저장
Clob 데이터 유형을 데이터베이스에 저장하려면 JDBC 프로그램을 사용하여 다음 단계를 따르십시오.
1단계:데이터베이스에 연결
getConnection()을 사용하여 데이터베이스에 연결할 수 있습니다. DriverManager 메서드 수업.
jdbc:mysql://localhost/sampleDB인 MySQL URL을 전달하여 MySQL 데이터베이스에 연결합니다. (여기서 sampleDB는 데이터베이스 이름), 사용자 이름 및 암호를 getConnection() 메서드에 대한 매개변수로 사용합니다.
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
2단계:준비된 진술 작성
prepareStatement()를 사용하여 PreparedStatement 객체 생성 연결 방법 상호 작용. 이 메서드에 매개변수로 삽입 쿼리(자리 표시자 포함)를 전달합니다.
PreparedStatement pstmt = con.prepareStatement("INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)");
3단계:자리 표시자에 값 설정
PreparedStatement의 setter 메서드를 사용하여 자리 표시자에 값을 설정합니다. 상호 작용. 컬럼의 데이터 유형에 따라 메소드를 선택하십시오. 예를 들어 열이 VARCHAR 유형이면 setString() 메소드를 사용하고 INT 유형이면 setInt() 메소드를 사용할 수 있습니다.
Clob 유형인 경우 setCharacterStream() 또는 setClob() 메서드를 사용하여 값을 설정할 수 있습니다. 이 메서드에 매개 변수 인덱스를 나타내는 정수 변수와 Reader 클래스의 개체를 매개 변수로 전달합니다.
pstmt.setString(1, "JavaFX"); pstmt.setString(2, "Java Library"); FileReader reader = new FileReader("E:\\images\\javafx.txt"); pstmt.setClob(3, reader); pstmt.execute();
4단계:명령문 실행
execute()를 사용하여 위에서 생성한 PreparedStatement 객체를 실행합니다. PreparedStatement 메소드 인터페이스.
데이터베이스에서 blob 검색
ResultSet 인터페이스의 getClob() 메서드는 열의 인덱스를 나타내는 정수(또는 열의 이름을 나타내는 String 값)를 받아 지정된 열에서 값을 검색하고 Clob 객체의 형태로 반환합니다.
while(rs.next()) { System.out.println(rs.getString("Name")); System.out.println(rs.getString("Type")); Clob clob = rs.getClob("Article"); }
getCharacterStream() Clob 메서드 인터페이스는 현재 Clob의 콘텐츠를 검색합니다. 개체 및 리더로 반환 개체.
getClob() 사용 메서드를 사용하면 Clob의 내용을 Reader 개체로 가져오고 write()를 사용하여 검색된 내용으로 텍스트 파일을 만들 수 있습니다. FileOutputStream 메소드 개체.
Reader r = clob.getCharacterStream(); char cbuf[] = new char[r.read()]; r.read(cbuf); FileOutputStream outPutStream = new FileOutputStream("E:\\images\\clob_output"+i+".txt"); outPutStream.write(cbuf.toString().getBytes());
예시
다음 예에서는 MySQL 데이터베이스에 Clob 데이터 유형이 있는 테이블을 생성합니다. 파일의 큰 텍스트 데이터를 파일에 삽입합니다. 텍스트를 다시 검색하여 다른 텍스트 파일에 저장합니다.
import java.io.FileReader; import java.io.FileWriter; import java.io.Reader; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class ClobExample { public static void main(String args[]) throws Exception { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); //Creating a table Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE Technologies( Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT)"); System.out.println("Table Created......"); //Inserting values String query = "INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)"; PreparedStatement pstmt = con.prepareStatement(query); pstmt.setString(1, "JavaFX"); pstmt.setString(2, "Java Library"); FileReader reader = new FileReader("E:\\images\\javafx.txt"); pstmt.setClob(3, reader); pstmt.execute(); pstmt.setString(1, "CoffeeScript"); pstmt.setString(2, "Scripting Language"); reader = new FileReader("E:\\images\\coffeescript.txt"); pstmt.setClob(3, reader); pstmt.execute(); pstmt.setString(1, "Cassandra"); pstmt.setString(2, "NoSQL Database"); reader = new FileReader("E:\\images\\cassandra.txt"); pstmt.setClob(3, reader); pstmt.execute(); //Retrieving the data ResultSet rs = stmt.executeQuery("select * from Technologies"); int j = 0; System.out.println("Contents of the table are: "); while(rs.next()) { System.out.println(rs.getString("Name")); Clob clob = rs.getClob("Article"); Reader r = clob.getCharacterStream(); String filePath = "E:\\Data\\clob_output"+j+".txt"; FileWriter writer = new FileWriter(filePath); int i; while ((i=r.read())!=-1) { writer.write(i); } writer.close(); System.out.println(filePath); j++; } } }
출력
Connection established...... Table Created...... Contents of the table are: JavaFX Java Library E:\images\clob_output1.txt CoffeeScript Scripting Language E:\images\clob_output2.txt Cassandra NoSQL Database E:\images\clob_output3.txt