Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让我的SQL数据库每天更新?_Java_Mysql_Exception_Jdbc_Sql Update - Fatal编程技术网

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

Java 如何让我的SQL数据库每天更新?,java,mysql,exception,jdbc,sql-update,Java,Mysql,Exception,Jdbc,Sql Update,我试着每天用java更新SQL数据库。但是,当我尝试它时,出现了一个异常,表示“ResultSet关闭后不允许操作” 我如何让它工作 public void loadData(){ model.getDataVector().removeAllElements(); model.fireTableDataChanged(); long Test = 0; String tanggalInsert = null; String TanggalDatang

我试着每天用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());
    }
    }

您有以下声明:

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()

创建一个单独的语句来运行更新,您的意思是“每天更新自己?”您的意思是每天运行一次更新语句?您是否在周期性检查时间的循环中运行loadData方法?异常来自何处?它似乎不是从发布的代码中抛出的,可能是在对同一语句调用
executeUpdate()
后尝试从
rs
读取时抛出的。在调用
executeUpdate()
之前,请尝试从
rs
读取所有属性,或者使用其他语句实例调用
executeUpdate()
。该语句也容易受到SQL注入的攻击。应该使用bind variables这个可能的副本修复了我的问题谢谢:3