将图片存入数据库和下载到本地

存入:成功将一张图片文件存入数据库

import java.sql.*;
import java.io.*;
public class Imagedata{
 public static void main(String[] args) {
  try {
   Class.forName("com.mysql.jdbc.Driver");//加载驱动
   Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.24.75:3306/photoserver?useUnicode=true&characterEncoding=utf-8","root","123");//建立数据库链接
 File file=new File("mark.png");//指定入库的文件


   FileInputStream fis=new FileInputStream(file);//创建输入流对象这里可以将fis想象成一个管道  这个管道架在file中存的路径所对应的图片上  将这个图片化成的二进制数据装入管道fis
   PreparedStatement ps=conn.prepareStatement("insert into photo18 values(?,?)"); //通过实例对象cn将SQL语句存入 PS中带入SQL数据库中
   ps.setBinaryStream(1,fis,(int)file.length());
   ps.setString(2,file.getName());
   ps.executeUpdate();//执行该数据库语句最终将图片分解成二进制数据放入表中的PHOTO字段
   
   System.out.println("图片入库成功");
 
   ps.close();
   fis.close();
   conn.close();
 
  }catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  catch (IOException e) {
   e.printStackTrace();
  }
  }
}
/**建库信息**/
 /*create database 表名 ;
/**建表信息**/
/*
 use 表名;
 create table image(image longblob,name char(30));
 */


读取:

public class Test { 
static String dbURL = "jdbc:mysql://localhost:3306/photoserver"; 
static String userID = "root"; 
static String passwd = "123"; 
public static void main(String[] args)throws Exception {
File f = new File(".\\"+File.separator+"photo") ;// 实例化File类的对象
     f.mkdir() ; // 创建文件夹
Class.forName("com.mysql.jdbc.Driver"); 
 Connection conn=(Connection) DriverManager.getConnection(dbURL, userID, passwd); 
 conn.setAutoCommit(false); 


 String sql2 = "SELECT image,name FROM image "; 
 PreparedStatement stmt2 = conn.prepareStatement(sql2); 
 ResultSet resultSet = stmt2.executeQuery(); 
 while (resultSet.next()) { 
 String name = resultSet.getString(2); 
 String description = resultSet.getString(1); 
 File image2 = new File("photo/" + name); 
 FileOutputStream fos = new FileOutputStream(image2); 
 byte[] buffer = new byte[1]; 
 InputStream is = resultSet.getBinaryStream(1); /*read(byte[] b),从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。write(byte[] b),
将 b.length 个字节从指定的 byte 数组写入此输出流。 */
 System.out.println("成功将:"+name+":写入指定文件夹下");
 
 while (is.read(buffer) > 0) { 
 fos.write(buffer); 
 } 
 fos.close(); 
 } 
conn.close(); 
 }

/**建库信息**/
 /*create database 表名 ;
/**建表信息**/
/*
 use 表名;
 create table image(image longblob,name char(30));
 */

你可能感兴趣的:(将图片存入数据库和下载到本地)