簡體   English   中英

java.sql.SQLException:mysql中結果集錯誤結束后

[英]java.sql.SQLException: After end of result set error in mysql

我試圖從數據庫中讀取數據並將ResultSet存儲在ArrayList 但是,我收到錯誤java.sql.SQLException: After end of result set打印數組列表時java.sql.SQLException: After end of result set 我檢查了是否沒有根據此鏈接兩次調用result.next() 有人有更好的方法來存儲結果集嗎? 然后,我可以在所需的位置將其打印出來。

Statement stmt=con.createStatement();  
            ResultSet rsVehicle=stmt.executeQuery("select * from vehicle");  
            while(rsVehicle.next()) {  
                vehicleList.add(rsVehicle);
            }
            System.out.println(vehicleList.size());

            for(int i=0;i<vehicleList.size();i++) {
                System.out.println(vehicleList.get(i).getInt(1)+"  "+vehicleList.get(i).getString(2)+"  "+vehicleList.get(i).getString(3)+"  "+
                        vehicleList.get(i).getString(4)+"  "+vehicleList.get(i).getString(5)+"  "+vehicleList.get(i).getString(6)+"  "+
                        vehicleList.get(i).getString(7)+"  "+vehicleList.get(i).getString(8)+"  "+vehicleList.get(i).getString(9)+"  "+
                        vehicleList.get(i).getString(10)+"  "+vehicleList.get(i).getString(11)+"  "+vehicleList.get(i).getString(12)+"  "+
                        vehicleList.get(i).getString(13)+"  "+vehicleList.get(i).getString(14)+"  "+vehicleList.get(i).getString(15));
            }

            PreparedStatement ps;
            ps =con.prepareStatement("SELECT * from job WHERE date = ?");
            ps.setString(1, date);
            ResultSet rsJob=ps.executeQuery();  
            while(rsJob.next()) {  
                jobList.add(rsJob);
            }
            System.out.println(jobList.size());

            for(int i=0;i<jobList.size();i++) {
                System.out.println(jobList.get(i).getInt(1)+"  "+jobList.get(i).getString(2)+"  "+jobList.get(i).getString(3)+"  "+
                        jobList.get(i).getString(4)+"  "+jobList.get(i).getString(5)+"  "+jobList.get(i).getString(6)+"  "+
                        jobList.get(i).getString(7)+"  "+jobList.get(i).getString(8)+"  "+jobList.get(i).getString(9)+"  "+
                        jobList.get(i).getString(10)+"  "+jobList.get(i).getString(11)+"  "+jobList.get(i).getString(12)+"  "+
                        jobList.get(i).getString(13)+"  "+jobList.get(i).getString(14)+"  "+jobList.get(i).getString(15));
            }

在代碼中,將結果集添加到列表中,然后遍歷該列表以獲取數據,但是正確的流程是:

  • 從結果集中提取數據並將其放在列表中。
  • 之后,您可以遍歷列表以打印結果。

該代碼應類似於:

// Create a new list of vehicles
List<Vehicle> vehicleList = new ArrayList<>();
Statement stmt=con.createStatement();  
ResultSet rsVehicle=stmt.executeQuery("select * from vehicle");  
while(rsVehicle.next()) {  
    // Create a new vehicle for each record returned from the query
    Vehicle vehicle = new Vehicle();

    // Set to the vehicle each property taken from that record
    vehicle.setBrand(rsVehicle.getString(1));
    ...

    // Add that vehicle to the list
    vehicleList.add(vehicle);
}

...

// Iterate the list and print each field you need
for (Vehicle vehicle: vehicleList) {
   // PRint each vehicle
   System.out.println("Vechicle brand: " + vehicle.getBrand());
}

注意:如果您將Vehicle類的方法重新定義為toString ,則可以直接調用System.out.println(vehicle);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM