【问题标题】:Exception while input a date into a MySQL database将日期输入 MySQL 数据库时出现异常
【发布时间】:2013-08-28 20:10:58
【问题描述】:

我有一个MySQL 数据库并想在其中写入一行。问题是MySQL 不喜欢我的query,为什么?这是我的代码

java.sql.Timestamp date = new java.sql.Timestamp(new java.util.Date().getTime());

for (Integer articlevalue : articlesendlist) {
    for (Integer suppliervalue : suppliersendlist) {
        connection.executeQuery("INSERT INTO Bestellungen(Bestellung_ID, Artikel_ID, Lieferant_ID, Datum, Preis) VALUES (" + maxorder + ", " + articlevalue + ", " + suppliervalue + ", " +  date + ", NULL)");
    }
}

我的代码的一个小描述。 articlesendlist 包含来自 JTabel 的选定值的 ID。这同样适用于suppliersendlist。我想将 ID 写入表“Bestellung”。变量maxorder 是表“Bestellung”的当前ID。

如果需要,例外是:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的 '12:45:06.164, NULL)' 附近

请不要评论/回答其他链接,我已经搜索过问题并阅读了几个网站。它们对我没有帮助或不适合我的问题。

  • 感谢您的帮助

【问题讨论】:

  • 首先,使用PreparedStatemens 来创建和执行您的查询,因为您的方式容易被SQL 注入。
  • 能把执行的查询语句贴出来吗? - 错过了逃避约会? id 是 int 还是 varchar?试试这个:connection.executeQuery("INSERT INTO Bestellungen(Bestellung_ID, Artikel_ID, Lieferant_ID, Datum, Preis) VALUES (" + maxorder + ", " + articlevalue + ", " + suppliervalue + ", '" + date + "', NULL)");
  • @svz 你甚至不知道我是否使用它们。我给自己写了一个方法,你不知道我在里面用的是什么......
  • 投反对票的能解释一下吗?
  • @Gerret,我知道您没有使用PreparedStatement,因为您使用String 连接来构建查询。

标签: java mysql date


【解决方案1】:

尝试改变这一行:

connection.executeQuery("INSERT INTO Bestellungen(Bestellung_ID, Artikel_ID, Lieferant_ID, Datum, Preis) VALUES (" + maxorder + ", " + articlevalue + ", " + suppliervalue + ", " +  date + ", NULL)");

到这里:

connection.executeQuery("INSERT INTO Bestellungen(Bestellung_ID, Artikel_ID, Lieferant_ID, Datum, Preis) VALUES ('" + maxorder + "','" + articlevalue + "','" + suppliervalue + "','" +  date + "','NULL')");

【讨论】:

  • 是的,你是对的 :) 但这是为什么呢?错误是什么?为什么我必须放“'”? ^^
【解决方案2】:

异常很明显不是吗。

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的 '12:45:06.164, NULL)' 附近

您没有在日期字段周围使用引号。

但是,您确实应该避免像这样执行 SQL 查询,并为此使用 PreparedStatemens

PreparedStatemens 具有特定的方法,例如 setDatesetTimesetLongsetString 等,您无需担心在代码中添加正确的引号。

【讨论】:

  • 嗯,也许这对你来说很明显,而不是对我来说,这就是我在这里问的原因。使用我发布的代码,您无法知道我是否使用 PreparedStatement。我写了一个方法并在那里使用它们......这个方法称为executeQuery
  • 您通过操作字符串调用executeQuery,这将要求您在插入 SQL 语句中使用日期值周围的引号。
  • ??我现在不明白那个评论。这对我之前的评论毫无意义。
  • 接受的答案也是如此,即在插入的值周围加上引号。
  • ... 是的,我知道这就是我接受它的原因。但是它并没有改变你的 cmets 有一个连接的东西,但是没关系
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 2018-01-30
相关资源
最近更新 更多