JDBC Blob数据类型是什么?如何存储和读取数据?

BLOB是二进制大对象,可以容纳可变数量的数据,最大长度为65535个字符。

这些用于存储大量的二进制数据,例如图像或其他类型的文件。定义为TEXT的字段也包含大量数据。两者之间的区别在于,存储数据的排序和比较在BLOB上区分大小写,而在TEXT字段中不区分大小写。您未使用BLOB或TEXT指定长度。

将Blob存储到数据库中

要将Blob数据类型存储到数据库,请使用JDBC程序执行以下步骤

步骤1:连接到数据库

您可以使用DriverManager类的getConnection()方法连接到数据库。

通过传递MySQL URL到jdbc:mysql:// localhost / sampleDB(其中sampleDB是数据库名称),用户名和密码作为getConnection()方法的参数,以连接到MySQL数据库。

String mysqlUrl = "jdbc:mysql://localhost/sampleDB";

Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

步骤2:创建一个准备好的语句

使用Connection接口的prepareStatement()方法创建PreparedStatement对象。为此方法传递插入查询(带有占位符)作为参数。

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

步骤3:为占位符设置值

使用PreparedStatement  接口的setter方法将值设置为占位符。根据列的数据类型选择方法。例如,如果该列为VARCHAR类型,则使用setString()method;如果该列为INT类型,则可以使用setInt()method。

如果它是Blob类型,则可以使用setBinaryStream()setBlob()方法为其设置值。向这些方法传递表示参数索引的整数变量和InputStream类的对象作为参数。

pstmt.setString(1, "sample image");

//插入Blob类型

InputStream in = new FileInputStream("E:\\images\\cat.jpg");

pstmt.setBlob(2, in);

步骤4:执行语句

使用PreparedStatement接口的execute()方法执行上面创建的PreparedStatement对象。

从数据库检索Blob

getBlob()ResultSet接口的方法接受表示列索引的整数(或表示列名称的String值),并检索指定列的值,并以Blob对象的形式返回。

while(rs.next()) {

   rs.getString("Name");

   rs.getString("Type");

   Blob blob = rs.getBlob("Logo");

}

Blob接口的getBytes()方法检索当前Blob对象的内容,并以字节数组形式返回。

使用getBlob()方法,可以将blob的内容获取到字节数组中,并使用FileOutputStream对象的write()方法创建图像。

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 {

      //注册驱动程序

      DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      //获得连接

      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";

      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

      System.out.println("Connection established......");

      //创建表

      Statement stmt = con.createStatement();

      stmt.execute("CREATE TABLE SampleTable( Name VARCHAR(255), Image BLOB)");

      System.out.println("Table Created");

      //插入值

      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();

      //检索数据

      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

以上是 JDBC Blob数据类型是什么?如何存储和读取数据? 的全部内容, 来源链接: utcz.com/z/351512.html

回到顶部