这几天做项目时遇到一个问题,要将大文本存入数据库,一开始本来是想用long类型,insert是行了,可是查询的时候却报错,原来long类型并不支持where语句查询
于是想到用clob类型,一开始想的太简单了,一用才发现这个clob还不能直接这么插入,clob的插入大概分为三个步骤:1.插入empty_clob 2.获取clob 3.更新clob字段
String sql = "insert into *** ( ***) values (empty_clob())";
Connection con = null;
PreparedStatement pst=null;Statement st=null;
ResultSet rs=null;
try {
/******************插入含 empty_clob的数据**************************/
con = DataAccess.getConnection();
con.setAutoCommit(false); //一定要使用事务非自动提交 不然下一步获取clob时会报提取顺序错误
pst = con.prepareStatement(sql);
.......pst参数注入
pst.executeUpdate();con.commit();
/*********************获取clob**************************************/
st=con.createStatement();
sql="select content from QY_FLFG where id='"+dto.getId()+"' for update" ;
rs = st.executeQuery(sql);
if (rs.next()) {
CLOB clob = (CLOB)rs.getClob(1);
clob.putString(1, dto.getContent());
/********************更新*************************************/
sql="update QY_FLFG set content=? where id='"+dto.getId()+"'";
pst = con.prepareStatement(sql);
pst.setClob(1, clob);
pst.executeUpdate();
con.commit();
}
} catch (Exception e) {
// TODO: handle exception
System.err.println(e.getMessage());
id=null;//如果抛出错误
}
finally{
try {
if (rs!=null) {
rs.close();
}
if (st!=null) {
st.close();
}
if (pst!=null) {
pst.close();
}
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}