Java连接数据库出现java.sql.SQLException: After end of result set的原因

源码

jb4.addActionListener(new ActionListener() {// 新增按钮事件监听器
			public void actionPerformed(ActionEvent e) {

				String str3, str4, str5, str6, str8 = null, str9 = null;
				String str1 = jt2.getText();
				String str2 = jt3.getText();
				str3 = jt4.getText();
				str4 = jt5.getText();
				str5 = jt6.getText();

				String str7 = "select ano from apply where ano='" + str1 + "'";

				if (str1.equals("") || str2.equals("") || str3.equals("") || str4.equals("") || str5.equals("")) {
					JOptionPane.showMessageDialog(null, "各项信息不能为空");
				} else {
					try {
						mysql.sql = mysql.con.createStatement();// 插入之前先在数据库里面查
						mysql.res = mysql.sql.executeQuery(str7);
						while (mysql.res.next()) {
							str8 = mysql.res.getString("ano");
						}
						str9 = mysql.res.getString("ano");
						if (str8 == null) {
							str8 = "insert into apply values(?,?,?,?,?)";
							PreparedStatement sql = mysql.con.prepareStatement(str8);
							sql.setString(1, str1);
							sql.setString(2, str2);
							sql.setString(3, str3);
							sql.setString(4, str4);
							sql.setString(5, str5);

							int result = sql.executeUpdate();

							JOptionPane.showMessageDialog(null, "插入成功");
						} else {

							JOptionPane.showMessageDialog(null, "申请编号已存在");
						}
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}
			}

		});

报错

在这里插入图片描述

错误分析

这个是由于当我们从数据库里面读取数据的时候,引用了多个结果集,但前一个结果集取得后,已经和数据库关闭,后面还在引用结果集。也就是下面的代码

				try {
						mysql.sql = mysql.con.createStatement();// 插入之前先在数据库里面查
						mysql.res = mysql.sql.executeQuery(str7);
						while (mysql.res.next()) {
							str8 = mysql.res.getString("ano");
						}
						str9 = mysql.res.getString("ano");
					

str8 引用结果集的是在 try 语句里面进行的,也就是数据库的连接还没有关闭,这个时候是没有问题的,但是当出现 str9 引用结果集的时候,这个时候 try 语句已经结束了,也就是和数据库已经断开连接了,所以会产生java.sql.SQLException: After end of result set的错误。

原创文章 44 获赞 47 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44480968/article/details/105872038