public int execute(String sql, List args) throws ActiveRecordException {
		int update = 0;
		
		logger.info(" sql = " + sql);
		PreparedStatement pstmt = null;
		try {
			pstmt = this.conn.prepareStatement(sql);
			if (DbKit.getDialect().getDialectName().equals("oracle")) { //oracle数据库
				
				//如果是带有returing的insert或者update语句,可以取得刚插入sequence的值
				if((sql.startsWith("insert") || sql.startsWith("update")) && (sql.contains("returning") && sql.endsWith("?"))){
					
					
					OraclePreparedStatement oraclestmt = pstmt.unwrap(OraclePreparedStatement.class);
					//error 在用连接池的情况下 OraclePreparedStatement不能转换为连接池中的PreparedStatement
					//OraclePreparedStatement ppst = (OraclePreparedStatement)this.conn.prepareStatement(sql);
					
					//CallableStatement cstmt = (CallableStatement) this.conn.prepareCall(sql);
					//cstmt.registerOutParameter(args.size() + 1, Type.INT);
					
					// 返回行id,返回值是第args.size() + 1个问号 insert into tb values(seq_.nextval, ?, ?, ?, ?)return id into ?
					oraclestmt.registerReturnParameter(args.size() + 1, OracleTypes.INTEGER);					
					DbKit.fillStatement(oraclestmt, args);
					oraclestmt.executeUpdate();
					ResultSet rs = oraclestmt.getReturnResultSet();
					//ResultSet rs = ppst.getGeneratedKeys();
					rs.next();
					this.keyId = rs.getInt(1);
					//this.keyId = cstmt.getInt(args.size() + 1);
					
					
				}else{
					DbKit.fillStatement(pstmt, args);
					update = pstmt.executeUpdate();
					
				}				
			} else {
				PreparedStatement ppst = this.conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
				DbKit.fillStatement(ppst, args);
				update = ppst.executeUpdate();
				ResultSet rs = ppst.getGeneratedKeys();
				rs.next();
				this.keyId = rs.getInt(1);
			}

			/*
			 * long t1 = System.currentTimeMillis();
			 * 
			 * long t2 = System.currentTimeMillis(); logger.info("Insert时间 = " +
			 * (t2-t1) + " ms")
			 */
		} catch (SQLException e) {
			DbKit.close(pstmt, this.conn);
			throw new ActiveRecordException("执行sql语句不成功!", e);
		}
		DbKit.close(pstmt, this.conn);
		return update;

	}