我对此进行了各种尝试,对此非常感谢。
基本上,我有一个SQL数据库,我想将一些数据保存到其中,我知道如何对我拥有的所有其他字段执行此操作,但是我也想使用此数据保存当前时间。
str ="INSERT INTO tblResults (username, curTime, outcome)" +
"VALUES(" +"'" + user +"'" +"," + (new Timestamp(date.getTime())) +"," +"'" + outcome +"'" +")";
然后执行该字符串,这是我多次尝试之一的示例,该尝试编译,但是出现错误:
'16'附近的语法不正确。
错误保存结果
16现在是小时...我认为是这样,因为时间戳将日期放在日期之前,而sql则相反,但是我不知道如何解决此问题,因此,我将不胜感激。 谢谢
stackoverflow.com/questions/2858182/
时间戳(java)通常与数据库中的TIMESTAMP不同。 您在数据库中为该字段指定了哪种数据类型?
建议不要使用Statement,而应使用PreparedStatement
日期如何格式化? 您是否考虑过将语句参数化? 这样可以省去将日期/时间转换为字符串然后返回的麻烦。
是的,我确实尝试过其他方法,那就是尝试所有可能性,因为我迷路了。 我指定了时间
使用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。
谢谢,前几天我曾尝试过准备好的语句,我不记得自己遇到了什么问题,但是我一定会再试一次。
您会在SQL查询中错过新的Timestamp()的撇号,但在这种情况下,您确实应该使用PreparedStatement。
我不知道我如何错过撇号,可能是所有删除和重新键入的内容,谢谢,前几天我确实尝试了一个准备好的语句,不知道为什么我放弃了,谢谢,我会再试一次。
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 +"'" +")";
由于新的Timestamp(date.getTime())的参考值进入了字符串,而不是正确的时间戳格式的字符串,因此出现了错误。
替换成这个然后执行:
str ="插入tblResults(用户名,curTime,结果)" +
" VALUES(" +"'" +用户+"'" +"," +(新的Timestamp(date.getTime())。toString()+"," +"'" +结果+"'" +")";
如果不放置toString()方法,则对象的引用地址将进入字符串。
您还可以在Logger中打印整个字符串,以查看str中实际发生了什么
谢谢,我尝试了此操作,但收到此错误,知道吗? 该语句未返回结果集。 错误保存结果
您是否正在使用executeUpdate()方法插入记录? 如果您不使用此语句,请使用此语句
非常感谢,我正在使用executeQuery(); executeUpdate()已修复它,看起来至少已正确保存了它,因此至少现在我有了一些可以改善的东西。 再次感谢。
@ user2092020很高兴我解决了您的问题并回答了您的问题。 请接受我的回答。 非常感谢