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