resultset 的指针报错原因

调试的代码如下:

                       stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet res; 
if(sql.contains(";")){
               String[] mysql = sql.replaceAll("\"","\'").split(";");
   System.out.println("Running: " + mysql[0] +"--"+ mysql[1]);
   //set queue
   stmt.execute(mysql[0]);        
   res = stmt.executeQuery(mysql[1]);
   }else{
    String mysql = sql.replaceAll("\"","\'"); 
   System.out.println("Running: " + mysql);
   res = stmt.executeQuery(mysql);
   }
int rscount = 0;
       try {
           while(res.next()){
            rscount = rscount + 1;
           }
       } catch (SQLException e1) {
           // TODO Auto-generated catch block
           e1.printStackTrace();
       }
   if(rscount ==0){
    result ="";
   }else{
    res.beforeFirst();
        rsmd = res.getMetaData();
    int columnCount = rsmd.getColumnCount();
    result = "";
        for (int i = 1; i <= columnCount; i++) {
           res.next();
           System.out.println(rsmd.getColumnTypeName(i) + "=>"+ rsmd.getColumnName(i) + ":"+ res.getObject(i));
           result = result + rsmd.getColumnName(i) + ":"+ res.getObject(i) +","+"\n";
    }

}

resultset指针报错类型

1.     java.sql.SQLException: Method not supported
        at org.apache.hive.jdbc.HiveBaseResultSet.last(HiveBaseResultSet.java:620)
        at HiveProbeJava.main(HiveProbeJava.java:85)

2.     java.sql.SQLException: Method not supported for TYPE_FORWARD_ONLY resultset

解决方案参考如下:

Statement st= con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE); 

ResultSet.TYPE_FORWARD_ONLY:在结果集遍历时光标索引只能向前的

ResultSet.TYPE_SCROLL_INSENSITIVE:在结果集遍历时光标索引可以上下移动

ResultSet.TYPE_SCROLL_SENSITIVE:在结果集遍历时光标索引可以上下移动,同时数据要是有并发修改,会立即更新到结果集。

同时也有两种并发类型:

CONCUR_READ_ONLY:只读

CONCUR_UPDATABLE:可更新,对于ResultSet结果集的修改会被更新到数据库。

所以在con.createStatement(光标类型,并发类型)时候会有2*3=6种组合


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值