日期:2014-05-16  浏览次数:20483 次

sqlserver和sybase数据库插入表数据返回主键的不同
做个记录,以后碰到了也可以看看。
public int addUserLog(final UserLog userLog) {
if(userLog==null) return -1;
if(JdbcUtil.isSybaseIQ){
int key = -1;
try{
String dateStr = UserLogUtil.getDateStr(new Date());
String values = userLog.getUserId()+","+userLog.getOperateType()+",'"+
userLog.getDescription()+"','"+dateStr+"'";
final String sql = "insert into ps_user_log (userId,operateType,description,createTime) values("+values+")";
Connection conn = this.getConnection();
Statement objStatement = conn.createStatement();
objStatement
.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet objResultSet = objStatement.getGeneratedKeys();
if (objResultSet.next()) {
key = objResultSet.getInt(1);
}
return key;
}catch (Exception e) {
logger.error("addUserLog error : ", e);
e.printStackTrace();
return key;
}
}else{
try{
final String sql = "insert into ps_user_log (userId,operateType,description,createTime) values(?,?,?,?)";

PreparedStatementCreator psc = new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection conn)
throws SQLException {
PreparedStatement ps=JdbcUtil.createPrepareStatement(conn,sql);
ps.setInt(1, userLog.getUserId());
ps.setInt(2, userLog.getOperateType());
ps.setString(3, userLog.getDescription());

ps.setDate(4, new java.sql.Date(System.currentTimeMillis()));
return ps;
}
};
KeyHolder kh = new GeneratedKeyHolder();
return getJdbcTemplate().update(psc, kh);
}catch(Exception e){
e.printStackTrace();
return -1;
}
}
}
顺便再提一句,sybase数据库中不能保存Boolean类型的数据,必须转换成int值,sqlserver则可以,但其保存在数据库的值也是按照int型来保存的,1:true 0:false