jdbc 使用PreparedStatement來存儲和讀取大數據(Blob或Clob)
//假設這里建立的數據庫位use,而建立的表位luserimport java.io.*;
import java.sql.*;
public class DBB{
private static String driver ="com.mysql.jdbc.driver";
private static String url ="jdbc:mysql://localhost:3306/use"; private static String user="root";
private static String pass="admin";
public static void main(String[]args){
Connection con= null;
PreparedStatement sta= null;
ResultSet res= null;
try{
//獲取數據源
//假設就是從d盤中讀取的一張照片;
File file= new File("d:" + File.separator + "photo.jpg");
int length= (int)file.length();
InputStream input = new FileInputStream(file);
//加載mysql驅動
Class.forName(driver);
//取得鏈接對象
con= DriverManager.getConnection(url,user,pass);
//取得操作對象
sta= con.prepareStatement("insert into luser values(?,?,?);");
//加載數據
sta.setInt(1,110);
sta.setString(2,"namefile");
sta.setBinaryStream(3,input ,length);
sta.executeUpdate();
sta.clearParameters();
input.close();//釋放資源;
}catch(SQLException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}catch(ClassNotFoundException e){ e.printStackTrace(); }
finally{
if(con!=null){
try{
con.close();
}catch(SQLException e){ //()%^&**()(&)(#%$%^&*(()__)(((
e.printStackTrace();
}
}
}
Statement stat= null;
try{
//數據的取得
stat= con.createStatement();
stat.executeQuery("select* from luser;");
res.next();
String filename= res.getString(2);
Blob blob= res.getBlob(3);
//把獲得的數據寫到指定的文件中
FileOutputStream out= new FileOutputStream("d:" + File.separator+ "dong" +".bak");
out.write(blob.getBytes(1,(int)blob.length()));
out.flush();//把內存中的東西刷出來
out.close();//釋放資源
}catch(SQLException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
finally{
if(stat!= null){
try{
stat.close();
}catch(SQLException e){
e.printStackTrace();
}
} if(con!=null){
try{
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
} </pre>