一个简单的Blob存取例子

 

Code:
  1. import java.io.*;  
  2. import java.sql.*;  
  3.   
  4. /** 
  5.  * 测试操作blob数据 
  6.  */  
  7. public class BlobTest {  
  8.     Connection con = null;  
  9.     private static String filepath = "d:/test/smile.jpg";  
  10.     private static String fileoutpath = "d:/test/smilecopy.jpg";  
  11.     /** 
  12.      * 往数据库中添加BLOB数据 
  13.      */  
  14.     public void addBlob() {  
  15.         try {  
  16.   
  17.             // 创建一个PreparedStatement实例  
  18.             PreparedStatement pstmt = con  
  19.                     .prepareStatement("insert into blobtest values(1,?)");  
  20.             File file = new File(filepath);  
  21.             FileInputStream fis = new FileInputStream(file);  
  22.             // 把输入流设置为预处理语句的对象。  
  23.             pstmt.setBinaryStream(1, fis, (int) file.length());  
  24.             // 执行更新  
  25.             pstmt.executeUpdate();  
  26.             pstmt.close();  
  27.             fis.close();  
  28.   
  29.         } catch (Exception e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.     }  
  33.   
  34.     /** 
  35.      * 创建一个表 
  36.      */  
  37.     public void createTable() {  
  38.         try {  
  39.             con.createStatement().execute(  
  40.                     "create table blobtest (id int ,pic blob,"  
  41.                             + "constraint pk_blobtest primary key(id));");  
  42.         } catch (Exception e) {  
  43.             e.printStackTrace();  
  44.         }  
  45.     }  
  46.   
  47.     /** 
  48.      * 从数据库中读取BLOB数据 
  49.      */  
  50.     public void getBlob() {  
  51.   
  52.         try {  
  53.             // 创建一个Statement实例  
  54.             Statement stmt = con.createStatement();  
  55.             ResultSet rst = stmt  
  56.                     .executeQuery("select * from blobtest where id=1");  
  57.             rst.next();  
  58.             // 获得blob数据和它的输入流,然后通过输入流把数据写到文件中。  
  59.             Blob blob = rst.getBlob("pic");  
  60.             FileOutputStream out = new FileOutputStream(new File(  
  61.                     fileoutpath));  
  62.             InputStream in = blob.getBinaryStream();  
  63.             int i;  
  64.             while ((i = in.read()) != -1)  
  65.                 out.write(i);  
  66.             // 关闭输入、输出流.  
  67.             in.close();  
  68.             out.close();  
  69.   
  70.         } catch (Exception e) {  
  71.             e.printStackTrace();  
  72.   
  73.         }  
  74.     }  
  75.   
  76.     public static void main(String[] args) throws Exception {  
  77.         Class.forName("com.mysql.jdbc.Driver").newInstance();  
  78.         BlobTest test = new BlobTest();  
  79.         test.con = java.sql.DriverManager.getConnection(  
  80.                 "jdbc:mysql://localhost:3306/test""root""123456");  
  81.         test.createTable();  
  82.         test.addBlob();  
  83.         test.getBlob();  
  84.     }  
  85. }  

MySQL有四种BLOB类型:

  ·tinyblob:仅255个字符

  ·blob:最大限制到65K字节

  ·mediumblob:限制到16M字节

  ·longblob:可达4GB

MyBatis是一个开源的持久层框架,它可以与关系数据库进行交互。在MyBatis中,可以使用BLOB(Binary Large Object)来存储和获取大量的二进制数据。 当我们需要将二进制数据存储到数据库中时,可以使用MyBatis的BLOB类型来声明相应的属性。在数据库表中,我们可以使用BLOB、BINARY或VARBINARY类型来存储二进制数据。在MyBatis的映射文件中,我们可以使用BLOB类型来和数据库对应的字段进行映射。 在存储二进制数据之前,我们需要将其转换成字节数组。可以使用InputStream或File对象来获取二进制数据,然后将其转换成字节数组,再使用MyBatis的BLOB对象进行存储。 在映射文件的insert语句中,我们可以使用#{blobProperty,jdbcType=BLOB}来指定BLOB类型的属性,并通过#{blobProperty}来引用该属性。当执行插入操作时,MyBatis会将字节数组转换为二进制数据,并存储到数据库中的BLOB字段中。 在查询二进制数据时,可以使用select语句查询到对应的BLOB字段。在映射文件中,我们可以使用#{blobProperty,jdbcType=BLOB}来接收查询结果,并通过#{blobProperty}来引用该属性。当执行查询操作时,MyBatis会将数据库中的BLOB字段转换为字节数组,并赋值给相应的属性。 总而言之,使用MyBatis存取BLOB数据需要将其转换成字节数组进行存储,然后在查询时将字节数组转换为对应的二进制数据。使用BLOB类型来声明属性,可以方便地进行数据库交互,实现对二进制数据的存储和获取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值