这次项目是要通过页面传sql语句,出于担心页面传来的sql无法配置到mapping.xml文件中,就先用了jdbcTemplate。现在工具都封装的很好了,用起来也很简单。
@Autowired
private
JdbcTemplate
jdbcTemplate
;
LobHandler lobHandler =
new
DefaultLobHandler()
;
// reusable object
jdbcTemplate
.execute(
"insert into soo_resource(uuid, name, sql, createtime, flag, version, seq) values (?,?,?,?,?,?,?)"
, new
AbstractLobCreatingPreparedStatementCallback(lobHandler) {
@Override
protected void
setValues
(PreparedStatement preparedStatement
,
LobCreator lobCreator)
throws
SQLException {
preparedStatement.setString(
1
,
createUuid())
;
preparedStatement.setString(
2
,
"gafis_person"
)
;
//得改
lobCreator.setClobAsString(preparedStatement
,
3
,
textAreaSql
)
;
preparedStatement.setTimestamp(
4
, new
Timestamp(System.
currentTimeMillis
()))
;
//setTimestamp保留时分秒
preparedStatement.setInt(
5
,
0
)
;
preparedStatement.setInt(
6
,
1
)
;
preparedStatement.setLong(
7
,
0L
)
;
}
})
;
以上是insert代码,需要注意两点
1,处理clob
step1
LobHandler lobHandler =
new
DefaultLobHandler()
;
//专业处理各种lob
step2
lobCreator.setClobAsString(preparedStatement
,
3
,
textAreaSql
)
; //插入
2,时间格式处理
java中的PreparedStatement类型的setDate() 方法要求 java.sql.Date,而 java.sql.Date 的构造函数不能为空。
所以正确做法是:
pstmt.setDate(8, new Date(System.currentTimeMillis()));
或者:
pstmt.setDate(8, new Date(new java.util.Date().getTime()));
另外,setDate()只能是日期型,最小单位是日。假如需要时分秒需要:
pstmt.setTiemstamp(8, new Timestamp(System.currentTimeMillis()));
或者:
pstmt.setTimestamp(8, new Timestamp(new java.util.Date().getTime()));
如果把从自己文件中的String类型的Date直接存入数据库中,可以使用
pstmt.setTimestamp(8,Timestamp.valueOf(in.get(8)) );
最后,由于用ajax发送请求,接收返回。注意如何在success函数中接收返回值。