BLOB (Objek Biner Besar), objek biner besar, adalah wadah yang dapat menyimpan file biner. Di komputer, gumpalan seringkali merupakan jenis bidang yang digunakan dalam database untuk menyimpan file biner. Gumpalan adalah file besar. Gumpalan khas adalah gambar atau file suara. Karena ukurannya, mereka harus diproses dengan cara khusus (misalnya: mengunggah, mengunduh, atau menyimpannya dalam database).
1. Konsep Dasar
Dalam pengembangan aktual, kadang -kadang perlu menggunakan program untuk secara langsung menyimpan teks besar atau data biner ke dalam database untuk penyimpanan.
Untuk mysql, hanya ada gumpalan, tetapi tidak ada clobs. MySQL menggunakan teks untuk menyimpan teks besar, dan teks dan gumpalan dibagi menjadi:
TinyText, Teks, MediumText dan LongText
Tinyblob, gumpalan, mediumblob dan longblob
2. Bangun Lingkungan Uji
2.1. Struktur Proyek Uji Dibangun
Seperti yang ditunjukkan pada gambar:
2.2. Tulis file konfigurasi db.properties
driver = com.mysql.jdbc.driverurl = jdbc: mysql: // localhost: 3306/jdbcstudyusername = rootpassword = xdp
2.3. Tulis kelas alat jdbcutils
Paket Me.Gacl.Utils; impor java.io.inputStream; impor java.sql.connection; impor java.sql.driverManager; impor java.sql.resultset; impor java.sql.sqlexception; impor java.sql.statemement; impor java.sqllexception; impor java.sql.statemement; impor java.sqllexception; impor java.sql.statement; driver string statis = null; private static string url = null; Private Static String username = null; kata sandi string statis pribadi = null; static {try {// Baca informasi koneksi database di file db.properties inputStream di = jdbcutils.class.getClassLoader (). getResourceAsstream ("db.properties"); Properti prop = properti baru (); prop.load (dalam); // Dapatkan driver koneksi database driver = prop.getProperty ("driver"); // Dapatkan Koneksi Database Alamat URL URL = prop.getProperty ("URL"); // Dapatkan Username Nama Pengguna Koneksi Basis Data = prop.getProperty ("nama pengguna"); // Dapatkan kata sandi koneksi database = prop.getProperty ("kata sandi"); // Muat kelas driver basis data.forname (driver); } catch (exception e) {lempar pengecualian baruininitializerError (e); }} / *** @method: getConnection* @description: Dapatkan objek koneksi database* @anthor: The Lofty Wolf** @Return Connection Object Koneksi Basis Data* @Throws SQlexception* / Public Static Connection GetConnection () melempar SQlexception {return driverManager.getConnection (Urlnection (Url, Url, URL (URLEKNEKSI (URLE (URLECKECECECECECEnEnection (Url, URL (URLECKERNEKSI, URLE (URLECKEnEnection (UR, URLE (URLECKECECECTION {return driverManager. } / ** * @method: rilis * @description: rilis sumber daya, * sumber daya yang akan dirilis termasuk objek koneksi basis data koneksi, objek pernyataan yang bertanggung jawab untuk melaksanakan perintah SQL, dan objek hasil yang disimpan yang menyimpan hasil kueri * @anthor: 光克 * * @param conn * @param st * @param rs * / public static void void void public void void publik (public void void public void (Public void void Public void (Public Void (Public Void (Public Void Public Static Void (Public Void Public Static Void (Public Void Public Static Void Public Static Public Static Public (Public Static Public Static Static Public Static Public Public if (rs! = null) {coba {// tutup objek hasil yang menyimpan hasil kueri rs.close (); } catch (Exception e) {E.PrintStackTrace (); } rs = null; } if (st! = null) {coba {// tutup objek pernyataan yang bertanggung jawab untuk menjalankan perintah sql st.close (); } catch (Exception e) {E.PrintStackTrace (); }} if (conn! = null) {coba {// tutup objek koneksi basis data koneksi conn.close (); } catch (Exception e) {E.PrintStackTrace (); }}}} 3. Gunakan JDBC untuk memproses teks besar di MySQL
Untuk jenis teks di mysql, metode berikut dapat dipanggil untuk mengaturnya
PreparedStatement.setcharacterstream (indeks, pembaca, panjang); // Perhatikan bahwa panjangnya harus diatur dan diatur ke tipe int int
Untuk jenis teks di MySQL, Anda dapat menghubungi metode berikut untuk mendapatkannya.
reader = resultet.getcharacterstream (string columnLabel); 2 string s = resultet.getString (string columnLabel);
3.1. Contoh tes
1. Tulis skrip tes SQL
Buat Database JDBCStudy; Gunakan JDBCStudy; Buat Table TestClob (ID Int Primary Key Auto_INCREMENT, resume teks);
2. Tulis kode uji sebagai berikut:
Paket Me.Gacl.Demo; impor java.io.file; impor java.io.filereader; import java.io.filewriter; impor java.io.reader; impor java.sql.connection; import java.sql.preparedstatement; impor java.sql. me.gacl.utils.jdbcutils; impor org.junit.test;/*** @classname: jdbcoperaclob* @description: Gunakan jdbc untuk mengoperasikan teks besar mysql* @Author: lonely cangang* @date: 2014-9-19 10:10:04 pm* pm* pm* @date: 2014-9-19 10:10:04:04 pm* pm* pm* @date: 2014-9-19 10:0:04:04 pm* pm* pm* @date: 2014-9-19 10:10:04 pm @Method: tambahkan * @description: masukkan data teks besar ke dalam database * @anthor: 发年 * */ @test public void add () {connection conn = null; Disiapkan st = null; Hasil rs = null; Pembaca pembaca = null; coba {conn = jdbcutils.getConnection (); String sql = "masukkan ke dalam nilai testclob (resume) (?)"; ST = Conn.PrepareStatement (SQL); // Jalur yang diperoleh dengan cara ini, ruang di mana ruang akan digantikan oleh "%20" menggunakan "string path = jdbcoperaclob.class.getClassLoader (). GetResource (" data.txt "). GetPath ();//ganti"%20 "kembali ke jalur spasi = path. Filereader (file); JDBCUTIL.RELEASE (Conn, St, RS); Lanjutkan dari testclob di mana id = 2 "; st = conn.prepareStateMent (sql); rs = st.executeQuery (); string contentStr =" "; string content =" "; if (rs.next ()) {// menggunakan hasil. // Gunakan resultet.getCharaCTterStream ("nama bidang") untuk mendapatkan konten pembaca data teks besar = rs.getcharacterstream ("resume"); buffer char [] = char baru [1024]; int len = 0; FileWriter out = FileWriter baru ("d: //1.txt"); while ((len = reader.read (buffer))> 0) {contentStr += string baru (buffer); out.write (buffer, 0, len); } out.close (); reader.close (); } System.out.println (konten); System.out.println ("-----------------------------------------------"); System.out.println (ContentSTR); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {jdbcutils.release (conn, st, rs); }}}4. Gunakan JDBC untuk memproses data biner MySQL
Untuk jenis gumpalan di mysql, pengaturan metode berikut dapat disebut:
Persiapan. setBinaryStream (i, inputstream, panjang);
Untuk jenis gumpalan di MySQL, Anda dapat menghubungi metode berikut untuk mendapatkan:
InputStream in = resultet.getBinaryStream (string columnLabel); inputStream in = resultet.getBlob (string columnLabel) .GetBinaryStream ();
4.1. Contoh tes
1. Tulis skrip tes SQL
Buat Table TestBlob (ID int Key Auto_increment, Image Longblob);
2. Tulis kode uji sebagai berikut:
Paket Me.Gacl.Demo; impor java.io.file; impor java.io.fileInputStream; import java.io.fileoutputStream; impor java.io.inputStream; impor java.sql.connection; impor java.sql.predsrarents; impor java.soLSet; me.gacl.utils.jdbcutils; impor org.junit.test;/ *** @classname: jdbcoperaclob* @description: gunakan jdbc untuk memanipulasi data biner mysql/ seperti public, 94-.114: 2014-10-a. Jdbcoperablob { / *** @method: tambahkan* @description: masukkan data biner ke dalam database* @anthor: luke cangang** / @test public void add () {koneksi conn = null; Disiapkan st = null; Hasil rs = null; coba {conn = jdbcutils.getConnection (); String sql = "masukkan ke dalam nilai testblob (gambar) (?)"; ST = Conn.PrepareStatement (SQL); // Jalur yang diperoleh dengan cara ini, spasi di dalamnya akan diganti dengan "%20" bukan string path = jdbcoperablob.class.getClassLoader (). GetResource ("01.jpg"). GetPath (); // ganti "%20" akan diganti dengan spasion path = path.replaceall ("%20", ""); File file = file baru (path); FileInputStream fis = new fileInputStream (file); // stream st.setBinaryStream (1, fis, (int) file.length ()); int num = St.ExecuteUpdate (); if (num> 0) {System.out.println ("Masukkan berhasil!!"); } fis.close (); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {jdbcutils.release (conn, st, rs); }} / *** @method: baca* @description: Baca data biner dalam database* @anthor: 六后** / @test public void baca () {koneksi conn = null; Disiapkan st = null; Hasil rs = null; coba {conn = jdbcutils.getConnection (); String sql = "Pilih gambar dari testblob di mana id =?"; ST = Conn.PrepareStatement (SQL); St.Setint (1, 1); RS = St.ExecuteQuery (); if (rs.next ()) {// inputStream in = rs.getBlob ("gambar"). getBinaryStream (); // metode ini juga dapat menjadi inputStream di = rs.getBinaryStream ("gambar"); int len = 0; byte buffer [] = byte baru [1024]; FileOutputStream out = new FileOutputStream ("d: //1.jpg"); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); } in.close (); out.close (); }} catch (Exception e) {e.printstacktrace (); } akhirnya {jdbcutils.release (conn, st, rs); }}}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.