使用JDBC处理二进制数据
对于MySQL中的BLOB类型,可调用如下方法设置:
PreparedStatement. setBinaryStream(i, inputStream, length);
//大二进制数据存入到数据库中
public void insert(){
Connection con=null;
PreparedStatement st=null;
ResultSet rs=null;
try{
//获取连接
try {
con=DBManager.getConnection();
String sql="insert into testblob (images) value(?)";
st=con.prepareStatement(sql);
File f=new File("yes.gif");
st.setBinaryStream(1, new FileInputStream(f),f.length());
int result=st.executeUpdate();
if(result>0){
System.out.println("插入成功");
}else{
System.out.println("插入失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//资源释放
finally{
DBManager.release(con, st, rs);
}
}
对MySQL中的BLOB类型,可调用如下方法获取:
InputStream in = resultSet.getBinaryStream(i);
InputStream in = resultSet.getBlob(i).getBinaryStream();
public void find(){
Connection con=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
con=DBManager.getConnection();
String sql="select images from testblob where id=1";
st=con.prepareStatement(sql);
rs=st.executeQuery();
//结果集的读取
if(rs.next()){
InputStream fis=rs.getBinaryStream("images");
byte[] buff=new byte[1024];
int len=0;
FileOutputStream fos=new FileOutputStream("yes.gif");
while((len=fis.read(buff))>0){
fos.write(buff,0,len);
}
fos.close();
fis.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
附加:DBManager.java对数据库的链接
public class DBManager {
private static String username;
private static String password;
private static String url;
private static String driver;
static{
try{
InputStream in = DBManager.class.getClassLoader().getResourceAsStream("config/dbcp.properties");
Properties prop = new Properties();
prop.load(in);
driver = prop.getProperty("driverClassName");
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");
Class.forName(driver);
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, username, password);
}
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch (Exception e) {e.printStackTrace();}
rs = null;
}
if(st!=null){
try{
st.close();
}catch (Exception e) {e.printStackTrace();}
st = null;
}
if(conn!=null){
try{
conn.close();
}catch (Exception e) {e.printStackTrace();}
conn = null;
}
}
}