问题描述
所以我试图用条件将数据输入到我的 sql server 中,我打印出该值并且该方法没有任何问题,但是准备语句只向表中添加了一个相同的数据,这是我的代码
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);
}
}
这是我打印出 makan 和 trans 时的结果
200000 400000
170000 340000
170000 340000
130000 260000
170000 340000
准备好的语句只执行相同的值......
解决方法
您的 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,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);
}
}