使用 While java 将数据更新到 SQL 服务器

Update data to SQL Server with While java

所以我试图将数据输入到我的 sql 服务器中,我打印出值并且该方法没有任何问题,但是 prepare 语句仅将一个相同的数据添加到 table,这是我的代码

public static void tunjanganKaryawan(){
    try {
        Staff  staff = new Staff();
        Statement stmt=getConn().createStatement();
        ResultSet rs=stmt.executeQuery("select * from list_karyawan where Status ='Tetap'");
        while(rs.next()){
            staff.setCuti(rs.getInt("Cuti") + rs.getInt("Tanpa_Kabar"));
            staff.setjmlhAbsensi(rs.getInt("Absensi"));
            int makan1 = (int) staff.gethitungTunjanganMakan();
            int Trans = (int) staff.gethitungTunjanganTrans();
            System.out.println(makan1+" "+Trans);

            String query = "update list_karyawan set Tunjangan_Makan = ? ,Tunjangan_Trans = ? where Status = 'Tetap'";
            ps =  getConn().prepareStatement(query);
            ps.setInt(1,makan1);
            ps.setInt(2,Trans);

            ps.executeUpdate();
        }
    }catch (Exception e){
        System.out.println(e);
    }

}

Here is the result when i print out the makan and trans

200000 400000
170000 340000
170000 340000
130000 260000
170000 340000

这里是 table 中的数据

准备好的语句只执行相同的值....

您的sql查询

update list_karyawan set Tunjangan_Makan = ? ,Tunjangan_Trans = ? where Status = 'Tetap'

将更新 Status = 'Tetap' 中的所有记录,而不是一次更新一条记录。此外,select * 正在从您的数据库中提取更多数据,即使用比您期望的用例更多的资源。我建议选择需要的字段,例如

select ID,Cuti,Tanpa_Kabar,Absensi  from list_karyawan where Status ='Tetap'

为了更新单独的记录,在 sql 语句的 where 条件中使用唯一标识符(例如 ID 列)将解决您的问题。建议修改如下:

public static void tunjanganKaryawan(){
    try {
        Staff  staff = new Staff();
        Statement stmt=getConn().createStatement();
        ResultSet rs=stmt.executeQuery("select ID,Cuti,Tanpa_Kabar,Absensi  from list_karyawan where Status ='Tetap'");
        while(rs.next()){
            staff.setCuti(rs.getInt("Cuti") + rs.getInt("Tanpa_Kabar"));
            staff.setjmlhAbsensi(rs.getInt("Absensi"));
            int makan1 = (int) staff.gethitungTunjanganMakan();
            int Trans = (int) staff.gethitungTunjanganTrans();
            System.out.println(makan1+" "+Trans);

            String query = "update list_karyawan set Tunjangan_Makan = ? ,Tunjangan_Trans = ? where ID=?";
            ps =  getConn().prepareStatement(query);
            ps.setInt(1,makan1);
            ps.setInt(2,Trans);
            ps.setInt(3,rs.getInt("ID")); //use id from previous query
            ps.executeUpdate();
        }
    }catch (Exception e){
        System.out.println(e);
    }

}