mysql二进制文件存储


练习了一下mysql关于二进制文件的存储;

1.首先要创立一个表,二进制文件的存储和一般的字段不一样,二进制文件对应的字段类型要用blob,我创立的时候是用的longBlob,blob有几种类型的,主要是存储的长度不一样!

2.java类:下面是简单的测试类:

package com.test.mysql;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

 

setBinaryStream(int parameterIndex, InputStream x, long length),长度为long类型的

setBinaryStream(int parameterIndex, InputStream x),以及没有这个参数的;

刚开始的时候存储的时候,这句话老是报错,后来上上看了一下,原来这个方法有三个重载的方法:

setBinaryStream(int parameterIndex, InputStream x, int length),长度为int类型的;

然后又下了一个5.1.12的,mysql网上下载的最新的。

 

其中后两个都是要java1.6以后才行,并且jdbc4.0才能支撑。

我原来的mysql jdbc driver是mysql-connector-java-5.0.4-bin 的

网上说:mysql-connector-java-5.0.7-bin 都是3.0的,所以我这个就更不用说了

但是我把参数转化为int类型就可以了。。

public class TsetBinaryInsert {

然后就可以了 。。这样就保留成功了。。下载估计差不多。。

 public static void main(String[] args) {
  TsetBinaryInsert tbi = new TsetBinaryInsert();
  Connection conn = TsetBinaryInsert.getConn();
  String fileName = "c:\\a.gif";
  tbi.saveBinaryFile(fileName, conn);
  System.out.println("数据插入成功!");
 }
 
 public void saveBinaryFile(String fileName,Connection conn) {
  PreparedStatement stat = null;
  try {
   File file = new File(fileName);
   FileInputStream fis = new FileInputStream(file);
   String sql = "insert into productInfo(name,productPicture) values(?,?)";
   stat =  conn.prepareStatement(sql);
   stat.setString(1, "青蛙王子");
   stat.setBinaryStream(2, fis,file.length());
   
   stat.executeUpdate();
   fis.close();
   
  } catch (FileNotFoundException e) {
   System.out.print("文件没有找到");
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }finally {
    try {
     if(stat != null) stat.close();
     if(co大主宰nn != null) conn.close();
    } catch (SQLException e) {
     e.printStackTrace();
    }
  }
 }
 
 public static Connection getConn() {
  Connection conn = null;
  try {
   Class.forName("com.mysql.jdbc.Driver");
   conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest", "root", "root");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return conn;
 }
}
.其中要注重的地方,就是   stat.setBinaryStream(2, fis,file.length());这个方法,


你可能感兴趣的:(insert,close,getconnection,mytest)