mysql blob字段存儲圖片操作示例

openkk 12年前發布 | 32K 次閱讀 MySQL 數據庫服務器

表結構:

create table view(
    id int unsigned NOT NULL AUTO_INCREMENT, 
    catid int,title varchar(256),
    picture MEDIUMBLOB, 
    content TEXT,PRIMARY KEY (id)
);
java類操作:
import java.awt.Image;
import java.io.*;
import java.nio.ByteBuffer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import org.bean.View;

/*

  • @author weijian.zhongwj */ public class ViewPointDao {

    public static View getView(Integer catId) {

     View view = new View();
     try {
         String sql2 = "SELECT title, content, picture FROM view where catid=? limit 1";
         PreparedStatement stmt2 = BaseDaoFactory.getInstance().prepareStatement(sql2);
         stmt2.setInt(1, catId);
         ResultSet resultSet = stmt2.executeQuery();
         while (resultSet.next()) {
             String name = resultSet.getString(1);
             String description = resultSet.getString(2);
    
             ByteBuffer bb = ByteBuffer.allocate(1024 * 1024);
             byte[] buffer = new byte[1];
             InputStream is = resultSet.getBinaryStream(3);
    
             while (is != null && is.read(buffer) > 0) {
                 bb.put(buffer);
             }
             ImageIcon icon = new ImageIcon(bb.array());
             view.setImage(icon.getImage());
             view.setTitle(name);
             view.setContent(description);
             return view;
         }
     } catch (IOException ex) {
         Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE, null, ex);
     } catch (SQLException ex) {
         Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE, null, ex);
     }
     return null;
    

    }

    public static boolean addView(View view) {

     FileInputStream fis = null;
     try {
    
         if (exit(view.getCatId())) {
             return update(view);
         }
    
         String sql = "INSERT INTO view (title, content, catid, picture) VALUES (?, ?, ?, ?)";
         PreparedStatement stmt = BaseDaoFactory.getInstance().prepareStatement(sql);
         stmt.setString(1, view.getTitle());
         stmt.setString(2, view.getContent());
         stmt.setInt(3, view.getCatId());
    
         if (view.getImageFile() != null) {
             File image = new File(view.getImageFile());
             fis = new FileInputStream(image);
             //image.length(),返回文件的大小
             stmt.setBinaryStream(4, fis, (int) image.length());
         } else {
             stmt.setBinaryStream(4, null, 0);
         }
         int count = stmt.executeUpdate();
         if (count > 0) {
             return true;
         } else {
             return false;
         }
     } catch (IOException ex) {
         Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE, null, ex);
     } catch (SQLException ex) {
         Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE, null, ex);
     } finally {
         try {
             if (fis != null) {
                 fis.close();
             }
         } catch (IOException ex) {
         }
     }
     return false;
    

    }

    public static boolean update(View view) {

     FileInputStream fis = null;
     try {
         String sql = "update view set title= ? ,content= ? " + (view.getImageFile() != null ? (",picture= ? ") : " ") + "where catid= ? ";
         PreparedStatement stmt = BaseDaoFactory.getInstance().prepareStatement(sql);
         stmt.setString(1, view.getTitle());
         stmt.setString(2, view.getContent());
    
         if (view.getImageFile() != null) {
             stmt.setInt(4, view.getCatId());
             File image = new File(view.getImageFile());
             fis = new FileInputStream(image);
             //image.length(),返回文件的大小
             stmt.setBinaryStream(3, fis, (int) image.length());
         } else {
             stmt.setInt(3, view.getCatId());
         }
    
         int count = stmt.executeUpdate();
         if (count > 0) {
             return true;
         } else {
             return false;
         }
     } catch (IOException ex) {
         Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE, null, ex);
     } catch (SQLException ex) {
         Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE, null, ex);
     } finally {
         try {
             if (fis != null) {
                 fis.close();
             }
         } catch (IOException ex) {
         }
     }
     return false;
    

    }

    public static boolean exit(Integer catId) {

     try {
         String sql2 = "SELECT title, content, picture FROM view where catid=? limit 1";
         PreparedStatement stmt2 = BaseDaoFactory.getInstance().prepareStatement(sql2);
         stmt2.setInt(1, catId);
         ResultSet resultSet = stmt2.executeQuery();
         while (resultSet.next()) {
             return true;
         }
     } catch (SQLException ex) {
         Logger.getLogger(ViewPointDao.class.getName()).log(Level.SEVERE, null, ex);
     }
     return false;
    

    } }</pre>bean:

    import java.awt.Image;

public class View {

/**
 * 景點標題
 */
private String title;
/**
 * 景點內容
 */
private String content;
/**
 * 景點圖片
 */
private Image image;

/**
 * 景點圖片上傳路徑
 */
private String imageFile;

/**
 * 分類id
 */
private int catId;

public int getCatId() {
    return catId;
}

public void setCatId(int catId) {
    this.catId = catId;
}

public String getContent() {
    return content;
}

public void setContent(String content) {
    this.content = content;
}

public Image getImage() {
    return image;
}

public void setImage(Image image) {
    this.image = image;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getImageFile() {
    return imageFile;
}

public void setImageFile(String imageFile) {
    this.imageFile = imageFile;
}

}</pre>轉自:http://blog.csdn.net/zhongweijian/article/details/7668930

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!