Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

JDBC Blob 데이터 유형이란 무엇입니까? 데이터를 저장하고 읽는 방법은 무엇입니까?

<시간/>

BLOB는 최대 길이가 65535자인 가변적인 양의 데이터를 보유할 수 있는 대형 바이너리 개체입니다.

이들은 이미지 또는 다른 유형의 파일과 같은 대량의 이진 데이터를 저장하는 데 사용됩니다. TEXT로 정의된 필드도 많은 양의 데이터를 보유합니다. 이 둘의 차이점은 저장된 데이터에 대한 정렬 및 비교가 BLOB에서 대소문자를 구분하고 TEXT 필드에서 대소문자를 구분하지 않는다는 것입니다. BLOB 또는 TEXT로 길이를 지정하지 않습니다.

데이터베이스에 Blob 저장

Blob 데이터 유형을 데이터베이스에 저장하려면 JDBC 프로그램을 사용하여 아래 단계를 따르십시오.

1단계:데이터베이스에 연결

getConnection()을 사용하여 데이터베이스에 연결할 수 있습니다. DriverManager 메서드 수업.

jdbc:mysql://localhost/sampleDB인 MySQL URL을 전달하여 MySQL 데이터베이스에 연결합니다. (여기서 sampleDB는 데이터베이스 이름), 사용자 이름 및 암호를 getConnection() 메서드에 대한 매개변수로 사용합니다.

문자열 mysqlUrl ="jdbc:mysql://localhost/sampleDB"; 연결 con =DriverManager.getConnection(mysqlUrl, "루트", "비밀번호");

2단계:준비된 진술 작성

prepareStatement()를 사용하여 PreparedStatement 객체 생성 연결 방법 상호 작용. 이 메서드에 매개변수로 삽입 쿼리(자리 표시자 포함)를 전달합니다.

PreparedStatement pstmt =con.prepareStatement("INSERT INTO MyTableVALUES(?, ?)");

3단계:자리 표시자에 값 설정

PreparedStatement 의 setter 메서드를 사용하여 자리 표시자에 값을 설정합니다. 상호 작용. 컬럼의 데이터 유형에 따라 메소드를 선택하십시오. 예를 들어 열이 VARCHAR 유형이면 setString() 메소드를 사용하고 INT 유형이면 setInt() 메소드를 사용할 수 있습니다.

그리고 Blob 유형인 경우 setBinaryStream() 또는 setBlob() 메서드를 사용하여 값을 설정할 수 있습니다. 이 메소드에 매개변수 인덱스를 나타내는 정수 변수와 InputStream 클래스의 객체를 매개변수로 전달합니다.

pstmt.setString(1, "샘플 이미지");//Blob typeInputStream 삽입 =new FileInputStream("E:\\images\\cat.jpg");pstmt.setBlob(2, in); 

4단계:명령문 실행

execute()를 사용하여 위에서 생성한 PreparedStatement 객체를 실행합니다. PreparedStatement 메소드 인터페이스.

데이터베이스에서 blob 검색

ResultSet 인터페이스의 getBlob() 메서드는 열의 인덱스를 나타내는 정수(또는 열의 이름을 나타내는 String 값)를 받아 지정된 열에서 값을 검색하고 Blob 객체의 형태로 반환합니다.

while(rs.next()) { rs.getString("이름"); rs.getString("유형"); 얼룩 얼룩 =rs.getBlob("로고");}

getBytes() Blob 메서드 인터페이스는 현재 Blob의 내용을 검색합니다. 객체를 반환하고 바이트 배열로 반환합니다.

getBlob() 사용 방법을 사용하면 blob의 내용을 바이트 배열로 가져오고 write()를 사용하여 이미지를 만들 수 있습니다. FileOutputStream 메소드 개체.

바이트 byteArray[] =blob.getBytes(1,(int)blob.length());FileOutputStream outPutStream =new FileOutputStream("경로");outPutStream.write(byteArray);

예시

다음 예제에서는 blob 데이터 유형을 사용하여 MySQL 데이터베이스에 테이블을 만들고 여기에 이미지를 삽입합니다. 다시 검색하여 로컬 파일 시스템에 저장합니다.

java.io.FileInputStream 가져오기, java.io.FileOutputStream 가져오기, java.sql.Blob 가져오기, java.sql.Connection 가져오기, java.sql.DriverManager 가져오기, java.sql.PreparedStatement 가져오기, java.sql 가져오기. ResultSet;import java.sql.Statement;public class BlobExample { public static void main(String args[]) throws Exception { //드라이버 등록 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //연결 얻기 String mysqlUrl ="jdbc:mysql://localhost/sampleDB"; 연결 con =DriverManager.getConnection(mysqlUrl, "루트", "비밀번호"); System.out.println("연결이 설정되었습니다......"); //테이블 생성하기 Statement stmt =con.createStatement(); stmt.execute("CREATE TABLE SampleTable(이름 VARCHAR(255), 이미지 BLOB)"); System.out.println("테이블 생성"); //값 삽입 String query ="INSERT INTO SampleTable(Name,image) VALUES (?, ?)"; PreparedStatement pstmt =con.prepareStatement(쿼리); pstmt.setString(1, "샘플 이미지"); FileInputStream 핀 =new FileInputStream("E:\\images\\cat.jpg"); pstmt.setBlob(2, 핀); pstmt.execute(); //데이터 검색 ResultSet rs =stmt.executeQuery("select * from SampleTable"); 정수 i =1; System.out.println("테이블의 내용은 다음과 같습니다:"); while(rs.next()) { System.out.println(rs.getString("이름")); 얼룩 얼룩 =rs.getBlob("이미지"); 바이트 byteArray[] =blob.getBytes(1,(int)blob.length()); FileOutputStream outPutStream =new FileOutputStream("E:\\이미지\\blob_output"+i+".jpg"); outPutStream.write(byteArray); System.out.println("E:\\이미지\\blob_output"+i+".jpg"); System.out.println(); 나는 ++; } }}

출력

연결 설정.....Table CreatedContents 테이블의 내용은 다음과 같습니다:sample imageE:\images\blob_output1.jpg