我正在研究一个小的Java Crud API,该API在MySql数据库上执行Crud操作。一切正常,除非我尝试更新字段为空的表。
该表有4个字段:第一个(id_tess_fk
)和第二个(tag_fk
)是两个外键,第三个(data_start
)被设置为默认当前时间戳,第四个(data_end
)也是一个日期,创建行时该日期为null,并且在输入后将更新为实际日期。
我尝试使用IS NULL
语法和=null
,但是我总是得到相同的空结果。如果我在where条件中省略了此查询,查询将返回一些内容,但这并不是我真正需要的,因为我只需要更新满足条件的行即可。
我在做什么错了?
case "/nol": stmt = conn.prepareStatement("SELECT data_start FROM noleggi WHERE id_tess_fk=? AND tag_fk=? AND data_end IS null ;");
stmt.setString(1,id_tess);
stmt.setString(2,tag);
ResultSet rs = stmt.executeQuery();
//while(rs.next())
//{
java.util.Date data_start = rs.getDate("data_start");
int sec_used = Math.toIntExact((data_start.getTime() - data_end.getTime()) / 1000);
stmt = conn.prepareStatement("SELECT sec_cred FROM utenti WHERE id_tess=?;");
stmt.setString(1, id_tess);
rs = stmt.executeQuery();
sec_cred = rs.getInt("sec_cred");
sec_cred -= sec_used;
stmt = conn.prepareStatement("UPDATE `utenti` SET `sec_cred`=? WHERE `id_tess_fk`=?;");
stmt.setInt(1, sec_cred);
stmt.setString(2, id_tess);
stmt.executeUpdate();
java.sql.Timestamp timestamp_data_end = new Timestamp(System.currentTimeMillis());
stmt = conn.prepareStatement("UPDATE noleggi SET data_end=? WHERE id_tess_fk=? AND tag_fk=? AND data_end=?;");
stmt.setTimestamp(1, timestamp_data_end);
stmt.setString(2, id_tess);
stmt.setString(3, tag);
//stmt.setNull(4,Types.NULL);
value = stmt.executeUpdate();
if (value != 0)
{
jsonObject.put("response_code", 201);
jsonArray.put(jsonObject);
} else
{
jsonObject.put("response_code", 400);
jsonArray.put(jsonObject);
}
response.getWriter().println(jsonArray);
//}
stmt.close();
conn.close();
break;`