【问题标题】:JDBC statement fails to delete row in specific MySql tableJDBC 语句无法删除特定 MySql 表中的行
【发布时间】:2015-08-01 06:12:13
【问题描述】:

我有一张表,比如example1,我正在使用 jdbc 语句删除其中的一行。我尝试了各种方法,从delete from example1 where id = 1statement.addbatch(sql),但它不会删除该行。如果我在 Toad for Mysql 中执行相同的 sql 语句,它能够很好地删除该行。

奇怪的是,使用 jdbc 我能够从其他表中删除行就好了;只是这张特殊的表格给了我意想不到的结果。

这张桌子没有什么特别之处。它有一个主键,没有约束/外键关系。

此外,此删除是事务的一部分,因此自动提交设置为false,一旦所有记录都更新/插入/删除,则提交完成。这似乎与任何其他表没有任何问题,并且所有更新/删除/插入都完成得很好。

在权限方面,该表对 db 用户的权限与 db 中的任何其他表相同。

任何想法或指示将不胜感激!

【问题讨论】:

  • 您确认语句是从 java 触发的吗?
  • 您标记了此故障转移,但未在帖子中提及 - 为什么?你确定在你删除它的同时没有其他东西插入它吗?
  • 我不得不标记它故障转移,因为没有“失败”或“失败”标记,而且我没有创建新标记的权限。
  • 你能把表格结构和你用来执行查询的代码贴出来吗?
  • “从java中触发”是什么意思?你能解释一下吗?我有调试语句 + 我也在 eclipse 中调试,看到语句正在执行..system.out.println 还打印查询和长度为零的结果 int[]。没有其他东西可以在此表中插入任何内容。此表中的条目确实是通过存储过程插入的,当 gui 上的用户从表中删除某些内容时调用该存储过程..所以基本上,不同表中的任何删除都将导致该表中的条目包含该已删除记录的信息关于那张唱片。

标签: java mysql jdbc sql-delete failover


【解决方案1】:

在数据库上打开常规日志记录或在 JDBC 驱动程序中进行分析将向您显示数据库的实际情况:

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

通过将其添加到您的连接字符串来启用对 Connector/J 的查询分析:profileSQL=true

一般日志记录文档: http://dev.mysql.com/doc/refman/5.1/en/query-log.html

还有 mk-query-digest 用于嗅探您的网络流量并分析结果: http://www.maatkit.org/doc/mk-query-digest.html

【讨论】:

  • 谢谢约书亚。让我试试看。
  • 我发现了问题...这是我的代码错误。我在错误的连接上执行删除...我需要在源连接上执行它,但我在目标数据库连接上执行,由于目标中不存在这些记录,因此无法删除它们。 Joshua 的链接帮助我重新评估了我的连接特定设置,我发现了实际问题。
【解决方案2】:

我也遇到过这种情况

我记得查询中有一个明确的错误 尝试在 mysql sqlyog 或任何 GUI 中执行查询并检查它是否有效,我 100% 确定它不会有效

然后更正查询并检查它

【讨论】:

  • 就像我说的,我将查询从 system.out.println 复制并粘贴到 toad for mysql 中,它工作得很好。我的意思是像“从 id = 1 的 example1 中删除”这样的查询有多复杂?如果出现语法错误,它会抛出 sqlexception...我什至正在检查 SQLWarnings 但那里什么也没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 2013-04-02
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多