为了账号安全,请及时绑定邮箱和手机立即绑定

在java.sql异常关闭ResultSet后不允许进行操作

在java.sql异常关闭ResultSet后不允许进行操作

开心每一天1111 2021-05-09 04:05:19
我正在使用jersey创建简单的rest api,在这里我将从数据库中获取的所有数据分配给变量,然后将这些变量数据作为列表返回,但出现错误。我看过其他示例,但我不明白这是怎么回事,这是我所做的:public class UserDAOImpl implements UserDAO{public List<User> readUser() {    List<User> list = new ArrayList();    User u = new User();    try {    System.out.println("inside readuser impl");        Class.forName("com.mysql.jdbc.Driver");        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/userdb", "root", "");        Statement stmt = con.createStatement();        ResultSet rs = stmt.executeQuery("select * from user");        while (rs.next()) {            int id = rs.getInt("id");            String name = rs.getString("name");            String address = rs.getString("address");            u.setId(id);            u.setName(name);            u.setAddress(address);            System.out.println(u);            list.add(u); //adding user object to list            con.close();        }    } catch (Exception e) {        System.out.println(e);    }    return list; //returning to list for json response }}这是我的控制器,在获取对象后给出json响应@Path("/rest")public class UserController {@GET@Path("/getall")@Produces(MediaType.APPLICATION_JSON)public List<User> getAllUser(){    UserDAO udao = new UserDAOImpl();    return udao.readUser(); }}
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您将在一次迭代后关闭连接,这将导致在第二次迭代时在javasql异常上关闭ResultSet后不允许操作,将con.close移到循环外


public class UserDAOImpl implements UserDAO{

 public List<User> readUser() {

   List<User> list = new ArrayList();

   User u = new User();

   try {

        System.out.println("inside readuser impl");

        Class.forName("com.mysql.jdbc.Driver");

        Connection con = 

        DriverManager.getConnection("jdbc:mysql://localhost:3306/userdb", "root", "");

            Statement stmt = con.createStatement();

            ResultSet rs = stmt.executeQuery("select * from user");

            while (rs.next()) {

                int id = rs.getInt("id");

                String name = rs.getString("name");

                String address = rs.getString("address");

                u.setId(id);

                u.setName(name);

                u.setAddress(address);

                System.out.println(u);

                list.add(u); //adding user object to list

            }

        } catch (Exception e) {

            System.out.println(e);

        }

        con.close();

        return list; //returning to list for json response

     }

    }

甚至您可以对资源使用try它将自动关闭所有资源


 public class UserDAOImpl implements UserDAO{

    public List<User> readUser() {

        List<User> list = new ArrayList();

        User u = new User();

        try( Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/userdb", "root", ""); 

        Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("select * from user");){

        System.out.println("inside readuser impl");

            while (rs.next()) {

                int id = rs.getInt("id");

                String name = rs.getString("name");

                String address = rs.getString("address");

                u.setId(id);

                u.setName(name);

                u.setAddress(address);

                System.out.println(u);

                list.add(u); //adding user object to list

            }

        } catch (Exception e) {

            System.out.println(e);

        }

        return list; //returning to list for json response

        }

     }

我没有测试第二个,因为我没有这台机器的环境


查看完整回答
反对 回复 2021-05-12
  • 1 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信