调试的代码如下:
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种组合