Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ประเภทข้อมูล JDBC Blob คืออะไร วิธีการจัดเก็บและอ่านข้อมูลจากมัน?


BLOB เป็นอ็อบเจ็กต์ขนาดใหญ่แบบไบนารีที่สามารถเก็บข้อมูลจำนวนตัวแปรที่มีความยาวสูงสุด 65535 อักขระ

ข้อมูลเหล่านี้ใช้เพื่อจัดเก็บข้อมูลไบนารีจำนวนมาก เช่น รูปภาพหรือไฟล์ประเภทอื่นๆ ฟิลด์ที่กำหนดเป็น TEXT จะเก็บข้อมูลจำนวนมากเช่นกัน ความแตกต่างระหว่างทั้งสองคือ การเรียงลำดับและการเปรียบเทียบข้อมูลที่เก็บไว้จะคำนึงถึงขนาดตัวพิมพ์บน BLOB และไม่คำนึงถึงขนาดตัวพิมพ์ในฟิลด์ TEXT คุณไม่ได้ระบุความยาวด้วย BLOB หรือ TEXT

กำลังจัดเก็บ blob ในฐานข้อมูล

ในการจัดเก็บประเภทข้อมูล Blob ไปยังฐานข้อมูล โดยใช้โปรแกรม JDBC ให้ทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1:เชื่อมต่อกับฐานข้อมูล

คุณสามารถเชื่อมต่อกับฐานข้อมูลโดยใช้ getConnection() วิธีการของ DriverManager ชั้นเรียน

เชื่อมต่อกับฐานข้อมูล MySQL โดยส่ง URL ของ MySQL ซึ่งก็คือ jdbc:mysql://localhost/sampleDB (โดยที่ sampleDB คือชื่อฐานข้อมูล) ชื่อผู้ใช้และรหัสผ่านเป็นพารามิเตอร์สำหรับเมธอด getConnection()

String mysqlUrl ="jdbc:mysql://localhost/sampleDB";Connection con =DriverManager.getConnection(mysqlUrl, "root", "password");

ขั้นตอนที่ 2:สร้างคำสั่งที่เตรียมไว้

สร้างอ็อบเจ็กต์ PreparedStatement โดยใช้ prepareStatement() วิธีการของการเชื่อมต่อ อินเตอร์เฟซ. วิธีการนี้ส่งแบบสอบถามแทรก (พร้อมตัวยึดตำแหน่ง) เป็นพารามิเตอร์

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

ขั้นตอนที่ 3:ตั้งค่าให้กับตัวยึดตำแหน่ง

ตั้งค่าให้เป็นตัวยึดตำแหน่งโดยใช้วิธี setter ของ PreparedStatement อินเตอร์เฟซ. เลือกวิธีการตามประเภทข้อมูลของคอลัมน์ ตัวอย่างเช่น หากคอลัมน์เป็นประเภท VARCHAR ให้ใช้วิธี setString() และหากเป็นประเภท INT คุณสามารถใช้เมธอด setInt() ได้

และหากเป็นประเภท Blob คุณสามารถตั้งค่าโดยใช้เมธอด setBinaryStream() หรือ setBlob() วิธีการเหล่านี้ส่งผ่านตัวแปรจำนวนเต็มแทนดัชนีพารามิเตอร์และวัตถุของคลาส InputStream เป็นพารามิเตอร์

pstmt.setString(1, "ภาพตัวอย่าง");//การแทรก Blob typeInputStream ใน =ใหม่ FileInputStream("E:\\images\\cat.jpg");pstmt.setBlob(2, ใน); 

ขั้นตอนที่ 4:ดำเนินการคำสั่ง

ดำเนินการอ็อบเจกต์ PreparedStatement ที่สร้างขึ้นด้านบนโดยใช้ execute() วิธีการของ PreparedStatement อินเทอร์เฟซ

กำลังดึง Blob จากฐานข้อมูล

เมธอด getBlob() ของอินเทอร์เฟซ ResultSet ยอมรับจำนวนเต็มที่แสดงดัชนีของคอลัมน์ (หรือค่าสตริงที่แทนชื่อคอลัมน์) และดึงค่าที่คอลัมน์ที่ระบุและส่งกลับในรูปแบบของอ็อบเจ็กต์ Blob

ในขณะที่(rs.next()) { rs.getString("ชื่อ"); rs.getString("ประเภท"); Blob blob =rs.getBlob("โลโก้");}

getBytes() วิธีการของ Blob อินเทอร์เฟซดึงเนื้อหาของ Blob . ปัจจุบัน วัตถุและส่งคืนเป็นอาร์เรย์ไบต์

การใช้ getBlob() วิธีที่คุณสามารถรับเนื้อหาของ Blob ในอาร์เรย์ไบต์และสร้างภาพโดยใช้ write() วิธีการของ FileOutputStream วัตถุ

byte byteArray[] =blob.getBytes(1,(int)blob.length());FileOutputStream outPutStream =new FileOutputStream("path");outPutStream.write(byteArray);

ตัวอย่าง

ตัวอย่างต่อไปนี้สร้างตารางในฐานข้อมูล MySQL ที่มีประเภทข้อมูล blob แทรกรูปภาพลงไป ดึงกลับและจัดเก็บไว้ในระบบไฟล์ในเครื่อง

นำเข้า 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; BlobExample คลาสสาธารณะ { โมฆะคงที่สาธารณะหลัก (สตริง args []) พ่นข้อยกเว้น {// การลงทะเบียนไดรเวอร์ DriverManager.registerDriver (ใหม่ com.mysql.jdbc.Driver ()); //รับการเชื่อมต่อสตริง mysqlUrl ="jdbc:mysql://localhost/sampleDB"; การเชื่อมต่อ con =DriverManager.getConnection (mysqlUrl, "root", "password"); System.out.println("การเชื่อมต่อสำเร็จ......"); //สร้างตารางคำสั่ง stmt =con.createStatement(); stmt.execute("สร้างตาราง SampleTable (ชื่อ VARCHAR (255), Image BLOB)"); System.out.println("สร้างตารางแล้ว"); //การใส่ค่า String query ="INSERT INTO SampleTable(Name,image) VALUES (?, ?)"; preparedStatement pstmt =con.prepareStatement (แบบสอบถาม); pstmt.setString(1, "ภาพตัวอย่าง"); FileInputStream fin =ใหม่ FileInputStream("E:\\images\\cat.jpg"); pstmt.setBlob(2, ครีบ); pstmt.execute(); //ดึงข้อมูล ResultSet rs =stmt.executeQuery("select * from SampleTable"); int ผม =1; System.out.println("เนื้อหาของตารางคือ:"); ในขณะที่ (rs.next ()) { System.out.println (rs.getString ("ชื่อ")); Blob blob =rs.getBlob("รูปภาพ"); ไบต์ byteArray[] =blob.getBytes(1,(int)blob.length()); FileOutputStream outPutStream =ใหม่ FileOutputStream("E:\\images\\blob_output"+i+".jpg"); outPutStream.write (byteArray); System.out.println("E:\\images\\blob_output"+i+".jpg"); System.out.println(); ผม++; } }}

ผลลัพธ์

เชื่อมต่อแล้ว......ตาราง CreatedContents ของตารางคือ:sample imageE:\images\blob_output1.jpg