Statement stmt = connection.createStatement(); //1
ResultSet QueryF= stmt.executeQuery(sql); //2
while(QueryF.next()) { //3
//分区存在.
//查找分区数据.
sql="select * from lte2018 partition(lte20180101)"; //4
ResultSet executeQuery = stmt.executeQuery(sql); //5
while(executeQuery.next()) { //6
//进行查询. 进来了就是有数据的.
long long1 = executeQuery.getLong("textid"); //7
System.out.println(long1);
此段代码需要注意的问题::
致命问题为 *Operation not allowed after ResultSet closed.都是围绕此问题出现的.
一 . #2 部分已经存在一个ResultSet. #5处又出现一个. 所以会报此错.
原因: 一个statment对应多个ResultSet 进行操作。从statment得到的QueryF,必须马上操作此QueryF后,才能去得到另外的executeQuery ,再对executeQuery 操作,不能互相交替使用,会引起QueryF已经关闭错误——Operation not allowed after ResultSet closed.
解决: #3#4 中间处添加 QueryF.close;
二. 因为#3#6 处为while.所以,在第一次循环后,如果还有内容就会继续进行循坏获取.所以还会出现此问题. 如不想继续获取.将while换成if.
(✿◕‿◕✿)
那么什么又是ResultSet?
这个ResultSet 究竟是个什么鬼呢?查看API文档之后,总结如下:
2.1
ResultSet 对象具有指向其当前数据行的光标。 最初,光标被置于第一行之前。调用 next() 方法将光标移动到下一行;
因为该方法在 ResultSet 对象没有下一行时返回 false, 所以可以在 while 循环中使用它来迭代结果集,调用getXXX(int fieldIndex)/getXXX(String columnName)方法获取字段值。
2.2 ResultSet 接口提供用于从当前行获取列值的获取方法(getBoolean、getLong 等)。
可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列, 每列只能读取一次。
2.3 用作获取方法的输入的列名称不区分大小写
好了,这下已经明白了它的用途,我们写一个程序来读取它吧
3.1 读取方法1 – 通过索引来遍历读取
while(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
String gender = rs.getString(3);
System.out.println("id:"+id+" 姓名:"+name+" 性别:"+gender);
}
3.2 读取方法2 – 通过字段名称来读取
强调一下,这个传入的字段名称可以不区分大小写,因为在mysql中就是不区分的
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println("id:"+id+" 姓名:"+name+" 性别:"+gender);
}
作者:时光漫步2015
来源:CSDN
原文:https://blog.csdn.net/u014726937/article/details/52840104
版权声明:本文为博主原创文章,转载请附上博文链接!
=============== ✪ ω ✪分割线 ✪ ω ✪ =================
出现错误’
java.sql.SQLException: Operation not allowed after ResultSet closed
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.result.ResultSetImpl.checkClosed(ResultSetImpl.java:470)
at com.mysql.cj.jdbc.result.ResultSetImpl.next(ResultSetImpl.java:1808)
at com.alibaba.druid.pool.DruidPooledResultSet.next(DruidPooledResultSet.java:69)
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 语句'
语句错误.
[SQL] alter table lte2018 drop partition lteMaxvalue;
[Err] 1508 - Cannot remove all partitions, use DROP TABLE instead
我的情况是,此时只有一个表分区,然后进行删除操作. )=> 此分区不存在
[Err] 1508 - Cannot remove all partitions, use DROP TABLE instead
删除唯一 分区. )=> 此分区存在
[SQL] alter table lte2018 drop partition lteMaxvalue;
[Err] 1507 - Error in list of partitions to DROP
是因为此表中没有 Maxvalue分区.
public String dropPartitionFromTableSql(String filesubstring) {
String sql ="alter table lte2018 drop partition lteMaxvalue;\r\n" +
"ALTER TABLE lte2018 ADD PARTITION(PARTITION `20180228` VALUES LESS THAN (TO_DAYS(20180301)));\r\n" +
"ALTER TABLE lte2018 ADD PARTITION (PARTITION lteMaxvalue VALUES LESS THAN Maxvalue)" ;
return sql;
}
createStatement.executeUpdate(dropPartitionFromTableSql(filesubstring));