JDBC 在createStatement时设置游标是TYPE_FORWARD_ONLY,但是结果集中还是可以用previous()方法
JDBC 在createStatement时设置游标是TYPE_FORWARD_ONLY,但是结果集中还是可以用previous()方法,照api文档上说应该在调用previous()方法时会抛出exception的,感觉很奇怪
代码如下:
                 Connection conn = null;
		try {
			conn = JDBCUtil.getConnection();
			Statement stat = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,  
					ResultSet.CONCUR_READ_ONLY);
			ResultSet rs = stat.executeQuery("SELECT * FROM TABLE_NAME");
			rs.next();
			rs.next();
			System.out.println(rs.getInt(1));
			rs.previous();
			System.out.println(rs.getInt(1));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (
SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
该table第一列是一个自增长的int值,这个程序执行的结果 为:
2
1
我用的数据库是MySql, driver是Connector/J(mysql-connector-java-5.1.17-bin.jar),我也换过其它的driver版本,也是有同样的问题,感觉很不解,请各位大侠帮忙看看,多谢!
------解决方案--------------------
这是因为到目前为止MySQL不支持TYPE_FORWARD_ONLY结果集的缘故,楼主可以在你代码里面JDBCUtil获取到连接之后添加下面的代码,利用DatabaseMetaData这个类查看数据库是否支持对应的结果集类型
Java code
        DatabaseMetaData dbmd=conn.getMetaData();
        if(dbmd.supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY)){
            System.out.println("*******MySQL支持TYPE_FORWARD_ONLY结果集**********");
        }else{
            System.out.println("*******MySQL不支持TYPE_FORWARD_ONLY结果集**********");
        }