/**
* 新增广告
*/
public boolean saveAdvertise(Advertisement advertisement,String webUrl,String url) throws Exception {
// TODO Auto-generated method stub
boolean b = false;
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rset = null;
try {
conn = this.getJdbcTemplate().getDataSource().getConnection();
conn.setAutoCommit(false);
BLOB blob = null;
String sql = "insert into HOLIDAY_ADVERTISEMENT(ADVERTISEID,ADVERTISENAME,PIC,LINKURL,HOTELADDNUM,HOLIDAYADDNUM,HOLIDAYTYPEADDNUM,PUBLISHSTATE,CHOREN) values (SEQ_ADVERTISE.nextval,?,empty_blob(),?,?,?,?,?,?)";
/** 新增广告策略
* 如果新增的广告频道位置在对应频道已经存在,需先将存在的频道位置设为null,然后新增就ok啦。
* 开始-----
**/
String sql2 = "";
if(advertisement.getHoteladdnum()!=null){
sql2 = "update HOLIDAY_ADVERTISEMENT set HOTELADDNUM = null where HOTELADDNUM = "+advertisement.getHoteladdnum()+" and CHOREN = '"+advertisement.getChoren()+"'";
pstmt = conn.prepareStatement(sql2);
pstmt.executeUpdate();
if(pstmt!=null){
pstmt.close();
}
}
if(advertisement.getHolidayaddnum()!=null){
sql2 = "update HOLIDAY_ADVERTISEMENT set HOLIDAYADDNUM = null where HOLIDAYADDNUM = "+advertisement.getHolidayaddnum()+" and CHOREN = '"+advertisement.getChoren()+"'";
pstmt = conn.prepareStatement(sql2);
pstmt.executeUpdate();
if(pstmt!=null){
pstmt.close();
}
}
if(advertisement.getHolidaytypeaddnum()!=null){
sql2 = "update HOLIDAY_ADVERTISEMENT set HOLIDAYTYPEADDNUM = null where HOLIDAYTYPEADDNUM = "+advertisement.getHolidaytypeaddnum()+" and CHOREN = '"+advertisement.getChoren()+"'";
pstmt = conn.prepareStatement(sql2);
pstmt.executeUpdate();
if(pstmt!=null){
pstmt.close();
}
}
/** 结束 **/
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, advertisement.getAdvertisename());
pstmt.setString(2, advertisement.getLinkurl());
if(advertisement.getHoteladdnum()!=null){
pstmt.setLong(3, advertisement.getHoteladdnum());
}else {
// pstmt.setNull(3, Types.NULL);
pstmt.setNull(3, java.sql.Types.INTEGER);
}
if(advertisement.getHolidayaddnum()!=null){
pstmt.setLong(4, advertisement.getHolidayaddnum());
}else {
// pstmt.setNull(4, Types.NULL);
pstmt.setNull(4, java.sql.Types.INTEGER);
}
if(advertisement.getHolidaytypeaddnum()!=null){
pstmt.setLong(5, advertisement.getHolidaytypeaddnum());
}else {
// pstmt.setNull(5, Types.NULL);
pstmt.setNull(5, java.sql.Types.INTEGER);
}
pstmt.setLong(6, advertisement.getPublishstate());
pstmt.setString(7, advertisement.getChoren());
pstmt.executeUpdate();
if(pstmt!=null){
pstmt.close();
}
pstmt = conn
.prepareStatement("select PIC from HOLIDAY_ADVERTISEMENT where ADVERTISENAME= ? for update");
pstmt.setString(1, advertisement.getAdvertisename());
rset = pstmt.executeQuery();
if (rset.next())
blob = (BLOB) rset.getBlob(1);
System.out.println(url);
String fileName = url;
File f = new File(webUrl+fileName);
FileInputStream fin = new FileInputStream(f);
System.out.println("file size = " + fin.available());
pstmt = conn
.prepareStatement("update HOLIDAY_ADVERTISEMENT set PIC=? where ADVERTISENAME=?");
OutputStream out = blob.getBinaryOutputStream();
byte[] data = new byte[(int) fin.available()];
fin.read(data);
out.write(data);
fin.close();
out.close();
pstmt.setBlob(1, blob);
pstmt.setString(2, advertisement.getAdvertisename());
pstmt.executeUpdate();
conn.commit();
/** 删除上传的文件 **/
File file = new File(webUrl+url);
if(file.exists()){
file.delete();
}
b = true;
} catch (Exception e) {
e.printStackTrace();
} finally{
if(rset!=null){
rset.close();
}
if(pstmt!=null){
pstmt.close();
}
if(conn!=null){
conn.close();
}
}
return b;
}
上面的代码是实际工作中的逻辑,总结一下保存图片到数据库的步骤:
一、insert into 保存数据到数据库,对应的blob地方使用empty_blob();
二、select PIC from HOLIDAY_ADVERTISEMENT where ADVERTISENAME= ? for update 查询出blob的字段,用blob保存起来。
三、update HOLIDAY_ADVERTISEMENT set PIC=? where ADVERTISENAME=? 将要保存的图片的文件流读取到blob中,替换原来的blob字段内容。具体代码在上面的程序中寻找。
分享到:
相关推荐
保存图片到数据库 代码中含oracle 和SQL server的对应插入方式
C#编码,可以将图片保存到sqllite数据库,并可循环查看,删除,包含源代码 最新程序下载到:http://download.csdn.net/source/3403121
pb保存图片到数据库
ssh保存图片到数据库 包括读取图片显示
android保存图片到数据库,教你如何使用sqlite操作图片基本代码
picturebox保存图片到数据库已二进制存放,并且取出重新显示到picturebox。
VB保存图片到Access数据库中,保存图片文件到数据库中,以二进制方式打开图片文件,新建记录,建立图片临时文件,一系列执行过程请参见代码文件。
VS2005+Sqlite数据库,可将本地图片存入数据库,可设置登录密码,很安全保存自己图片,目前最新版本,含源代码。
实现图片保存到数据中,和从数据库中读取图片
RichTextBox 练习,保存和读取图片数据库 QQ:292258449
用qt 实现 图片的 mysql 数据库的上传 下载 并显示图片的功能
ASP.NET将图片以二进制的形式保存到数据库
这是一个java的保存图片到数据库的小测试 把一张图片用流的方式保存到数据库中 然后在取出 只是一个测试 希望下载者看清楚在下
图片压缩后保存在数据库,数据库表字段存储图片,小图片存储在数据库
NULL 博文链接:https://heisetoufa.iteye.com/blog/262798
现在把图片存到数据库里面,用二进制流
基于SSM(Spring+SpringMvc+Mybatis)框架的图片上传并保存到数据库中与回显的案例
图片保存到access数据库 c#开发环境,界面采用树结构方式。