1. 程式人生 > >將資料夾下的所有圖片存入資料庫和下載到本地

將資料夾下的所有圖片存入資料庫和下載到本地

//已成功將一資料夾下的圖片檔案(有特定標號)存入資料庫
import java.sql.*;
import java.io.*;
public class Photo{
 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("D://xx.jpg");//指定入庫的檔案
String path=null;String path2=null;String path3=null;
   for(int i =1; i <= 5; i++)
         {
         for(int j =1; j <=4; j++)
           {
           //第一種路徑:path = (new StringBuilder()).append("E:\\map1\\hsxy\\").append("m").append(i).append("-").append(j).append("").append(".jpg").toString();
        path=("F:\\photo18\\m");
path2=(i+"-"+j);
path3=(".jpg");
System.out.print("讀取圖片:");
File file=new File(path+path2+path3);
   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.print(path+path2+path3);
   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));
 */