MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

JDBC Blobデータ型とは何ですか?それからデータを保存して読み取る方法は?


BLOBは、最大長65535文字の可変量のデータを保持できるバイナリラージオブジェクトです。

これらは、画像やその他の種類のファイルなど、大量のバイナリデータを保存するために使用されます。 TEXTとして定義されたフィールドも、大量のデータを保持します。 2つの違いは、保存されたデータの並べ替えと比較では、BLOBでは大文字と小文字が区別され、TEXTフィールドでは大文字と小文字が区別されないことです。 BLOBまたはTEXTで長さを指定しないでください。

blobをデータベースに保存する

Blobデータ型をデータベースに保存するには、JDBCプログラムを使用して、以下の手順に従います

ステップ1:データベースに接続する

getConnection()を使用してデータベースに接続できます DriverManagerのメソッド クラス。

jdbc:mysql:// localhost / sampleDB であるMySQLURLを渡して、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 MyTableVALUES(?, ?)");

ステップ3:プレースホルダーに値を設定します

PreparedStatement のsetterメソッドを使用して、プレースホルダーに値を設定します インターフェース。列のデータ型に従ってメソッドを選択しました。たとえば、列がVARCHARタイプの場合はsetString()メソッドを使用し、INTタイプの場合はsetInt()メソッドを使用できます。

また、Blobタイプの場合は、setBinaryStream()またはsetBlob()メソッドを使用して値を設定できます。これらのメソッドに、パラメーターインデックスとInputStreamクラスのオブジェクトを表す整数変数をパラメーターとして渡します。

pstmt.setString(1, "sample image");
//Inserting Blob type
InputStream in = new FileInputStream("E:\\images\\cat.jpg");
pstmt.setBlob(2, in);

ステップ4:ステートメントを実行する

execute()を使用して、上記で作成したPreparedStatementオブジェクトを実行します。 PreparedStatementのメソッド インターフェイス。

データベースからblobを取得しています

ResultSetインターフェイスのgetBlob()メソッドは、列のインデックスを表す整数(または、列の名前を表すString値)を受け取り、指定された列の値を取得して、Blobオブジェクトの形式で返します。

while(rs.next()) {
   rs.getString("Name");
   rs.getString("Type");
   Blob blob = rs.getBlob("Logo");
}

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データ型のテーブルを作成し、それに画像を挿入します。それを取得してローカルファイルシステムに保存します。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class BlobExample {
   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 SampleTable( Name VARCHAR(255), Image BLOB)");
      System.out.println("Table Created");
      //Inserting values
      String query = "INSERT INTO SampleTable(Name,image) VALUES (?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "sample image");
      FileInputStream fin = new FileInputStream("E:\\images\\cat.jpg");
      pstmt.setBlob(2, fin);
      pstmt.execute();
      //Retrieving the data
      ResultSet rs = stmt.executeQuery("select * from SampleTable");
      int i = 1;
      System.out.println("Contents of the table are: ");
      while(rs.next()) {
         System.out.println(rs.getString("Name"));
         Blob blob = rs.getBlob("Image");
         byte byteArray[] = blob.getBytes(1,(int)blob.length());
         FileOutputStream outPutStream = new
         FileOutputStream("E:\\images\\blob_output"+i+".jpg");
         outPutStream.write(byteArray);
         System.out.println("E:\\images\\blob_output"+i+".jpg");
         System.out.println();
         i++;
      }
   }
}

出力

Connection established......
Table Created
Contents of the table are:
sample image
E:\images\blob_output1.jpg

  1. JDBCの結果とは何ですか? ResultSetオブジェクトからデータを取得する方法は?

    ResultSet JDBCのインターフェースは、SQLクエリによって生成された表形式のデータを表します。現在の行を指すカーソルがあります。最初、このカーソルは最初の行の前に置かれます。 結果セット全体でポインタを移動する next() ResultSetインターフェースのメソッド 現在の(ResultSet)オブジェクトのポインタを現在の位置から次の行に移動します。このメソッドはブール値を返します。現在の位置の横に行がない場合はfalseを返し、そうでない場合はtrueを返します。したがって、whileループでこのメソッドを使用すると、結果セットの内容を繰り返すことができます。

  2. Windows Serverとは何ですか?Windowsとの違いは何ですか?

    Windows OSは、オペレーティングシステムの市場シェアのかなりの部分を占めています。そのため、最も人気のあるオペレーティングシステムの1つと見なすことができます。 OSは2つの主要なバリエーションで提供されます。 Windows for Desktop Windows Server Microsoft Windows Server 2022は、Windows11の最新のServerエディションです。どちらも異なる目的を果たしていることを知っておくことが重要です。それでは、 Windows Serverとは何かを理解してみましょう。 そしてそれはWindowsとどう違うのです