22---数据库编程09(blob)

本文介绍如何使用Java和MySQL的Blob类型来存储和检索图片文件。包括设置数据库连接、准备SQL语句、读写二进制文件的具体实现。
 

Blob和Clob相似,Clob存储海量文本信息;
Blob专门用于存放二进制数,如图片、电影等;
 import java.sql.DriverManager;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.*;
 import java.io.*;
 import java.text.*;
 public class Demo{
  //定义数据库的驱动程序
  public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
  //定义数据库的连接地址:
  public static final String DBURL="jdbc:mysql://localhost:3306/lid?characterEncoding=utf8";
  //定义数据库的用户名
  public static final String DBUSER="root";
  //定义数据库的密码
  public static final String DBPASSWORD="123";
  public static void main(String args[]) throws Exception{
   Connection conn=null;
   PreparedStatement pstmt=null;//数据库操作
   ResultSet rs=null;
   //加载数据库驱动
   Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;  
   conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 
   String name="lid";
   String sql="insert into userblob(names,photo) values(?,?)";
   pstmt=conn.prepareStatement(sql);//实例化PreparedStatement
   
   File f=new File("D:"+File.separator+"che.jpg");
   InputStream in=new FileInputStream(f);
   pstmt.setString(1,name);
   pstmt.setBinaryStream(2,in,(int)f.length());
   
   try{
    pstmt.executeUpdate();
    }
   catch(Exception e){
    System.out.println("11111111111");
    System.out.println(e);
    }
   pstmt.close();
   conn.close();
   }
  }

存入的图片是输出不出来的我们可以通过另存为们看看是否存入成功;

  import java.sql.DriverManager;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.*;
 import java.io.*;
 import java.text.*;
 public class Demo{
  //定义数据库的驱动程序
  public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
  //定义数据库的连接地址:
  public static final String DBURL="jdbc:mysql://localhost:3306/lid?characterEncoding=utf8";
  //定义数据库的用户名
  public static final String DBUSER="root";
  //定义数据库的密码
  public static final String DBPASSWORD="123";
  public static void main(String args[]) throws Exception{
   Connection conn=null;
   PreparedStatement pstmt=null;//数据库操作
   ResultSet rs=null;
   //加载数据库驱动
   Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;  
   conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 
   int id =1;
   String sql="select names , photo from userblob where id=?";
   pstmt=conn.prepareStatement(sql);//实例化PreparedStatement
   pstmt.setInt(1,id);
   rs=pstmt.executeQuery();
   InputStream in=null;
   if(rs.next()){
     String name=rs.getString(1);
     in=rs.getBinaryStream(2);
    }
  
   File f=new File("D:"+File.separator+"c.gif");
   OutputStream os=new FileOutputStream(f);
   while(in.read()!=-1){//边读边写
    os.write(in.read());
    }
   
   pstmt.close();
   conn.close();
   }
  }
 通过blob读取:
  import java.sql.DriverManager;
  import java.sql.Connection;
  import java.sql.SQLException;
  import java.sql.PreparedStatement;
  import java.sql.Blob;
  import java.sql.ResultSet;
  import java.util.*;
  import java.io.*;
  import java.text.*;
  public class Demo{
   //定义数据库的驱动程序
   public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
   //定义数据库的连接地址:
   public static final String DBURL="jdbc:mysql://localhost:3306/lid?characterEncoding=utf8";
   //定义数据库的用户名
   public static final String DBUSER="root";
   //定义数据库的密码
   public static final String DBPASSWORD="123";
   public static void main(String args[]) throws Exception{
    Connection conn=null;
    PreparedStatement pstmt=null;//数据库操作
    ResultSet rs=null;
    //加载数据库驱动
    Class.forName(DBDRIVER);//创建一个该驱动类的Class对象;  
    conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); 
    int id =1;
    String sql="select names , photo from userblob where id=?";
    pstmt=conn.prepareStatement(sql);//实例化PreparedStatement
    pstmt.setInt(1,id);
    rs=pstmt.executeQuery();
    Blob b=null;
    if(rs.next()){
     String name=rs.getString(1);
     b=rs.getBlob(2);
     }
    File f=new File("D:"+File.separator+"c.gif");
    OutputStream os=new FileOutputStream(f);
    os.write(b.getBytes(1,(int)b.length()));
    os.close();
    pstmt.close();
    conn.close();
    }
   }


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bzuld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值