亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在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 關注
  • 288 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號