Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 为什么更新查询不更新Mysql数据库中的日期_Java_Mysql - Fatal编程技术网

Java 为什么更新查询不更新Mysql数据库中的日期

Java 为什么更新查询不更新Mysql数据库中的日期,java,mysql,Java,Mysql,我在更新数据库中的数据时发现了一个问题。日志显示更新成功,但数据库中的数据未更改。这种情况有时会发生,但并不经常发生,如200例中的1例 代码如下: public void updateRecharge(String serial_num, String msg, String succ_amout, String datetime) { try { con = open(); } catch(Exception e) { e.printStack

我在更新数据库中的数据时发现了一个问题。日志显示更新成功,但数据库中的数据未更改。这种情况有时会发生,但并不经常发生,如200例中的1例

代码如下:

public void updateRecharge(String serial_num, String msg, String succ_amout, String datetime) {
    try {
        con = open();
    } catch(Exception e) {
        e.printStackTrace();
        log.writeLog(serial_num, datetime, "fail to update: " + e.getMessage());
        return;
    }

    String area = new JudgeTidField().checkTidField(serial_num)[1];
    String table = new JudgeTidField().table(area);

    String query = "update " + table + " set Recharge_state=?, Recharge_money=?, Recharge_record_date=? where Serial_number='" + serial_num + "';";

    try {   
        preState = con.prepareStatement(query);
        preState.setString(1, msg);
        preState.setFloat(2, Float.valueOf(succ_amout));
        preState.setString(3, datetime);
        preState.executeUpdate();

        log.writeLog(serial_num, datetime, "success to update");
    } catch(Exception e) {
        e.getMessage();
        log.writeLog(serial_num, datetime, "fail to update: " + e.getMessage());
    } finally {
        try {
            preState.close();
        } catch (SQLException e1) {
            e1.printStackTrace();
        }

        try {
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

我查看日志,它显示“更新成功”,但数据没有更改。什么样的问题导致了这种情况?

正如@MadProgrammer所建议的,您应该使用serialNum的参数替换,并检查executeUpdate的返回值

此外,我将使用将
datetime
转换为java.util.Date并调用将其应用于
preState
。这将尽早捕获任何日期格式问题


此外,如果任何参数为空,则必须显式调用

充值记录日期列的SQL类型是什么?1-您应该像其他参数一样,为序列号使用;2-
preState.executeUpdate()
返回一个
int
值,该值表示更新的行数,您可能需要检查it@SteveC类型是datetime