大きなバイナリオブジェクトであるBlob(バイナリ大きなオブジェクト)は、バイナリファイルを保存できるコンテナです。コンピューターでは、ブロブは多くの場合、バイナリファイルを保存するためにデータベースで使用されるフィールドのタイプです。ブロブは大きなファイルです。典型的なブロブは、写真またはサウンドファイルです。サイズのため、特別な方法で処理する必要があります(たとえば、データベースにアップロード、ダウンロード、または保存する必要があります)。
1。基本概念
実際の開発では、プログラムを使用して、ストレージのために大きなテキストまたはバイナリデータをデータベースに直接保存する必要がある場合があります。
MySQLには、塊だけがありますが、Clobはありません。 MySQLはテキストを使用して大きなテキストを保存し、テキストとブロブは以下に分割されます。
TinyText、テキスト、中テキスト、ロングテキスト
tinyblob、blob、mediumblob、longblob
2。テスト環境を構築します
2.1。構築されたテストプロジェクト構造
写真に示されているように:
2.2。 DB.Properties構成ファイルを書き込みます
driver = com.mysql.jdbc.driverurl = jdbc:mysql:// localhost:3306/jdbcstudyusername = rootpassword = xdp
2.3。 JDBCutilsツールクラスを書きます
package me.gacl.utils;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class JdbcUtils { private静的文字列ドライバー= null; private static string url = null; private static string username = null;プライベート静的文字列パスワード= null; static {try {// db.propertiesのデータベース接続情報を読み取りますinputstream in = jdbcutils.class.getClassloader()。プロパティprop = new Properties(); prop.load(in); //データベース接続を取得ドライバー= prop.getProperty( "driver"); //データベース接続を取得しますurlアドレスurl = prop.getProperty( "url"); //データベース接続を取得しますusername username = prop.getProperty( "username"); //データベース接続を取得するパスワード= prop.getProperty( "password"); //データベースドライバーclass.forname(driver)をロードします。 } catch(Exception e){新しい例外InchaninitializerError(e); }} / *** @method:getConnection* @description:データベース接続オブジェクトを取得* @anthor:ロフティウルフ** @return接続データベース接続オブジェクト* @throws sqlexception* / public static connection getConnection()throws sqlexception {return drivermanager.getConnection(url、username、username、password); } / ** * @method:リリース * @description:リリースリソース *リリースリリースには、接続データベース接続オブジェクト、sqlコマンドの実行を担当するステートメントオブジェクト、クエリ結果を格納する結果セットオブジェクトが含まれます * @anthor: * * @param conn * @param st * @param rs * / public static lilease(nectrate conn、rs) try {// Query results rs.close()を保存する結果セットオブジェクトを閉じます。 } catch(Exception e){e.printstacktrace(); } rs = null; } if(st!= null){try {// SQLコマンドの実行を担当するステートメントオブジェクトを閉じるSt.close(); } catch(Exception e){e.printstacktrace(); }} if(conn!= null){try {//接続データベース接続オブジェクトconn.close(); } catch(Exception e){e.printstacktrace(); }}}} 3. JDBCを使用して、MySQLで大きなテキストを処理します
MySQLのテキストタイプの場合、次の方法を呼び出して設定できます
preatedStatement.setcharacterstream(index、reader、length); //長さを設定してintタイプに設定する必要があることに注意してください
MySQLのテキストタイプについては、次の方法を呼び出してそれらを取得できます。
reader = resultset.getCharacterStream(String ColumnLabel); 2 String S = resultSet.getString(String ColumnLabel);
3.1。テストの例
1。SQLテストスクリプトを書き込みます
データベースjdbcStudyを作成します; jdbcStudyを使用します。
2。テストコードを次のように記述します。
packeme.gacl.demo; import java.io.file; import java.io.filereader; import java.io.filewriter; import java.io.io.reader; Import java.sql.connection; Import java.sql.preparedStatement; junit.test;/*** @classname:jdbcoperaclob* @description:jdbcを使用してmysqlの大きなテキストを操作します* @author:lonely canglang* @date:2014-9-19 10:10:0:04 PM* **/Public Class inticlob {/** @method:insit add aditデータベース* @anthor:发年**/ @test public void add(){connection conn = null; reprentStatement st = null;結果rs = null; Reader reader = null; try {conn = jdbcutils.getConnection(); string sql = "testclob(resume)values(?)に挿入"; st = conn.preparestatement(sql); //この方法で取得されたパス、スペースが「%20」に置き換えるスペースは、「string path = jdbcoperaclob.class.getClassLoader()。getResource( "data.txt")。ファイル(ファイル); jdbcutils.release(st、rs)}} @method: @description* @anthor:@test public void() id = 2 "; st = conn.preparestatement(sql); rs = st.executequery(); string contentstr =" "; string content =" "; if(rs.next()){// resustet.getString(" field name ")からrs = conn.preparestatement(sql); // resultset.getCharacterStream( "フィールド名")を使用して、大規模なテキストデータリーダーreader = rs.getCharacterStream( "Resume")のコンテンツを取得します。 char buffer [] = new char [1024]; int len = 0; filewriter out = new filewriter( "d://1.txt"); while((len = reader.read(buffer))> 0){contentsstr += new String(buffer); out.write(buffer、0、len); } out.close(); reader.close(); } system.out.println(content); System.out.println( "--------------------------------------------"); System.out.println(contentsstr); } catch(Exception e){e.printstacktrace(); }最後に{jdbcutils.release(conn、st、rs); }}}4. JDBCを使用してMySQLバイナリデータを処理します
MySQLのBLOBタイプの場合、次のメソッド設定を呼び出すことができます。
準備された測定。 setBinaryStream(i、inputstream、length);
MySQLのBLOBタイプの場合、次の方法を呼び出して取得できます。
inputStream in = resultSet.getBinaryStream(String columnLabel); inputStream in = resultSet.getBlob(string columnLabel).getBinaryStream();
4.1。テストの例
1。SQLテストスクリプトを書き込みます
Table TestBlobを作成します(ID INT Primary Key Auto_Increment、Image LongBlob);
2。テストコードを次のように記述します。
packed me.gacl.demo; Import java.io.file; import java.io.fileinputStream; Import java.io.fileoutputStream; Import java.io.inputStream; Import java.sql.connection; Import Java.sql.preparedstatement; me.gacl.utils.jdbcutils; import org.junit.test;/ *** @classname:jdbcoperaclob* @description:jdbcを使用してmysqlのバイナリデータを操作して(画像、サウンド、バイナリテキストなど)* @author:leuk can cang @date jdbcoperablob { / *** @method:add* @description:バイナリデータをデータベースに挿入* @anthor:luke canglang** / @test public void add(){connection conn = null; reprentStatement st = null;結果rs = null; try {conn = jdbcutils.getConnection(); string sql = "testblob(画像)値(?)に挿入されます"; st = conn.preparestatement(sql); //この方法で取得されたパスは、その中のスペースは、string path = jdbcoperablob.class.getclassloader()。getResource( "01.jpg")。getPath(); //「%20」を交換すると、spaces path = path.replaceall( "%20"、 "")に置き換えられます。 file file = new file(path); fileInputStream fis = new fileInputStream(file); //生成されたストリームSt.setbinaryStream(1、fis、(int)file.length()); int num = St.ExeCuteUpDate(); if(num> 0){system.out.println( "正常に!!"); } fis.close(); } catch(Exception e){e.printstacktrace(); }最後に{jdbcutils.release(conn、st、rs); }} / *** @method:read* @description:データベースでバイナリデータを読む* @anthor:六后** / @test public void read(){connection conn = null; reprentStatement st = null;結果rs = null; try {conn = jdbcutils.getConnection();文字列sql = "testblobからid =?"から画像を選択します。 st = conn.preparestatement(sql); St.setint(1、1); rs = St.Executequery(); if(rs.next()){// inputstream in = rs.getBlob( "image")。getBinaryStream(); int len = 0;バイトバッファー[] = new byte [1024]; fileoutputStream out = new fileoutputStream( "d://1.jpg"); while((len = in.read(buffer))> 0){out.write(buffer、0、len); } in.close(); out.close(); }} catch(例外e){e.printstacktrace(); }最後に{jdbcutils.release(conn、st、rs); }}}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。