java.sql.SQLException

	
	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 的功能

这个ResultSet 究竟是个什么鬼呢?查看API文档之后,总结如下:

2.1

ResultSet 对象具有指向其当前数据行的光标。 最初,光标被置于第一行之前。调用 next() 方法将光标移动到下一行;

因为该方法在 ResultSet 对象没有下一行时返回 false, 所以可以在 while 循环中使用它来迭代结果集,调用getXXX(int fieldIndex)/getXXX(String columnName)方法获取字段值。

2.2 ResultSet 接口提供用于从当前行获取列值的获取方法(getBoolean、getLong 等)。

可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列, 每列只能读取一次。

2.3 用作获取方法的输入的列名称不区分大小写

写代码读取ResultSet

好了,这下已经明白了它的用途,我们写一个程序来读取它吧

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分区.


java.sql.SQLException_第1张图片
此错,是相同的语句,在jdbc中和小绿叶中分别执行的结果.

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));

因为每次jdbc的链接只能执行一条sql语句,然后将三条当作了一条语句.
故: 出现语句格式错误.java.sql.SQLException_第2张图片

你可能感兴趣的:(mysql)