【问题标题】:Inserting date into database without use of prepared statement在不使用准备好的语句的情况下将日期插入数据库
【发布时间】:2014-08-01 01:54:14
【问题描述】:

我正在努力将此日期插入moviesTbl。我应该在没有准备好的声明的情况下这样做。当我尝试以下操作时,我收到了错误:

线程“main”中的异常 net.ucanaccess.jdbc.UcanaccessSQLException:用户缺少权限或 未找到对象:已发布

代码如下:

String date = "2012-12-28";
java.sql.Date released = java.sql.Date.valueOf(date);
qtd.update("insert into moviesTbl (Title, ReleaseDate, Genre) VALUES ('Harry Potter', released, 'drama')");

如何在没有准备好的语句的情况下插入日期?

【问题讨论】:

  • 我不熟悉“net.ucanaccess”,但大多数数据库都有定义的格式,用于在字符串中表示日期或 TIMESTAMP 数据。

标签: java sql date insert


【解决方案1】:

引号内有变量released。所以 SQL 错误是在说“我找不到释放的变量”。您需要将变量放入 java 中,以便将值放入 SQL 中,否则 SQL 服务器正在寻找一个名为 release 的变量,但它当然不存在,它在您的 Java 中。

String date = "2012-12-28";
qtd.update("insert into moviesTbl (Title, ReleaseDate, Genre) VALUES ('Harry Potter', '"+date+"', 'drama')");

正如@user2067753 所说,不同的数据库有不同的格式来获取和设置日期时间格式。假设你使用的是 MS SQL 服务器,那么following this post 你可以这样做

java.util.Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2012-12-28");
java.text.SimpleDateFormat msSqlDateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
qtd.update("insert into moviesTbl (Title, ReleaseDate, Genre) VALUES ('Harry Potter', '"+msSqlDateFormat.format(date)+"', 'drama')");

【讨论】:

  • 谢谢,虽然现在我收到一条错误消息,提示我的日期时间格式无效?
  • 每个 dbms 供应商都有不同的处理日期的方法。术语 datetime 表示您正在使用 MS SQL Server(但我不能 100% 确定)。对于 MS SQL Server,最安全的日期字符串是 YYYYMMDD String date = "20121228";,但您也必须发送单引号,因为它是您要发送的字符串(但它看起来像日期)
  • @ug_ :是的,我想,哈哈。再次感谢,但是当我尝试上述方法时,我首先遇到了“未报告的解析异常”问题,因此我为解析异常添加了 throws。但是,我得到了一个“完整性约束违规:唯一约束或索引违规”错误。
  • @user3893801 复制该错误消息,然后将其放入 Google。这是一个常见问题,但该错误与当前问题无关,我没有足够的信息来确切地告诉您导致错误的原因。尝试将重复列插入数据库中很可能导致错误。如果您仍然遇到问题并且找不到解决方案,请发布一个新的 Stack Overflow 问题,其中包含您的 SQL 表的详细信息和您收到的错误。
  • 哦,我正在使用 ms 访问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多