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