1

我非常感谢对此的任何帮助,我已经尝试了各种方法。

基本上我有一个 SQL 数据库,我想在其中保存一些数据,我知道如何处理我拥有的所有其他字段,但我也想用这些数据保存当前时间。

str = "INSERT INTO tblResults (username, curTime, outcome) " +
"VALUES(" + "'" + user + "'" +", " + (new Timestamp(date.getTime())) + ", " + "'" +     outcome + "'" +")";

然后我执行字符串,这是我的许多尝试之一的一个例子,这个尝试编译,但我得到一个错误:

'16' 附近的语法不正确。保存结果出错

现在是 16 小时......我认为这是因为时间戳将时间放在日期之前,而 sql 则相反,但我不知道如何解决这个问题,所以我会很感激任何帮助。谢谢

4

4 回答 4

2

使用 a PreparedStatement,它会为您解决:

    final String str = "INSERT INTO tblResults (username, curTime, outcome)  VALUES( ?, ?, ?)";
    final PreparedStatement preparedStatement = connection.prepareStatement(str);
    preparedStatement.setString(1, user);
    preparedStatement.setTimestamp(2, new Timestamp(date.getTime()));
    preparedStatement.setString(3, outcome);

我猜到你的其他数据类型......
正如其他人所说,Statement不推荐使用。

于 2013-02-20T16:29:22.137 回答
0

出现错误是因为 new Timestamp(date.getTime()) 的参考值进入了字符串,而不是正确的时间戳格式字符串。

替换为这个然后执行: str = "INSERT INTO tblResults (username, curTime, 结果) " + "VALUES(" + "'" + user + "'" +", " + (new Timestamp(date.getTime() ).toString() + ", " + "'" + 结果 + "'" +")";

如果你不放 toString() 方法,那么对象的引用地址将进入字符串。

您还可以在 Logger 中打印整个字符串,以查看实际进入 str 的内容

于 2013-02-20T16:24:48.117 回答
0
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
str = "INSERT INTO tblResults (username, curTime, outcome) " +
"VALUES(" + "'" + user + "'" +", " + dateFormat.format(date) + ", " + "'"  +     outcome + "'" +")";
于 2013-02-20T16:25:53.530 回答
0

您在 SQL 查询中错过了 new Timestamp() 周围的撇号,但对于这种情况,您确实应该使用 PreparedStatement 代替。

于 2013-02-20T16:27:16.070 回答