有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何让我的SQL数据库每天更新?

我试着每天用java更新SQL数据库。但是,当我尝试它时,出现了一个异常,表示“ResultSet关闭后不允许操作” 我如何让它工作

 public void loadData(){
    model.getDataVector().removeAllElements();
    model.fireTableDataChanged();
    long Test = 0;
    String tanggalInsert = null;
    String TanggalDatang = null;
    float hasil = 0, berat, etmal;
    long Waktu;
    Date TglDatang;
    Date TglToday;

    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/pembayaran","root","");
        Statement statement = con.createStatement();
        String sql = "SELECT * FROM pembayaran.transaksi";
        ResultSet rs = statement.executeQuery(sql);

        while(rs.next()){   
            TanggalDatang = rs.getString("kedatangan");
            SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
            TglDatang = (Date) date.parse(TanggalDatang);
            TglToday = new Date();
            Waktu = Math.abs(TglToday.getTime() - TglDatang.getTime());
            Test = TimeUnit.MILLISECONDS.toDays(Waktu);
            berat = Float.valueOf(rs.getString("berat"));
            etmal = Float.valueOf(Test)/15;
            hasil = berat*etmal*370;
            statement.executeUpdate("UPDATE `pembayaran`.`transaksi` SET `hari` = '"+Test+"', `harga` = '"+hasil+"' WHERE `transaksi`.`id_transaksi` ="+rs.getString("id_transaksi"));
            Object[] o = new Object[6];
            o[0]=rs.getString("id_transaksi");
            o[1]=rs.getString("nama_kapal");
            o[2]=rs.getString("berat");
            String a = rs.getString("kedatangan");
            String b = a.substring(8, 10)+"/"+a.substring(5, 7)+"/"+a.substring(0, 4);
            o[3]=b;
            o[4]=rs.getString("hari");
            o[5]=rs.getString("harga");
            model.addRow(o);
        }
       rs.close();
       statement.close();
    }
    catch (Exception e) {
        System.err.println("Kerusakan = " +e.getMessage());
    }
    }

共 (1) 个答案

  1. # 1 楼答案

    你有以下陈述:

    ResultSet rs = statement.executeQuery(sql);
    statement.executeUpdate("UPDATE `pembayaran`.`transaksi` SET `hari` = '"+Test+"', `harga` = '"+hasil+"' WHERE `transaksi`.`id_transaksi` ="+rs.getString("id_transaksi"));
    o[0]=rs.getString("id_transaksi");
    

    调用executeUpdate会关闭ResultSet,因此不能在它之后调用rs.getString

    相反,创建一个单独的语句来运行更新,使用con.createStatement()