【问题标题】:Will a MYSQL Insert statement ever return something not a 1?MYSQL Insert 语句会返回不是 1 的东西吗?
【发布时间】:2021-06-30 14:49:40
【问题描述】:

我正在尝试考虑一些错误场景,假设我们有一个简单的语句,例如:

INSERT INTO CAT_TABLE (NAME, BREED, AGE) VALUES ("Henry", "Siamese", 2)

这里的主键是猫的名字。在大多数情况下,如果不是所有情况,这应该返回 1。就 JDBC API 而言,是否有时间它可以返回不是 1 的东西?我知道如果值本身存在问题,它只会抛出 SQL 异常,但什么时候会抛出 0 或某个数值而不是 1?

更新:

使用此语句的 Java 代码类似于:

Connection connection = getConnection(...);
PreparedStatement ps = connection.prepareStatement(sql);
int result = ps.executeUpdate();
connection.commit();
return result;

【问题讨论】:

  • 出于兴趣,你会如何处理一只也叫亨利的 2 岁大的波斯猫?
  • 这应该返回 1 是什么意思? SQL 语句不是返回值的函数。
  • @forpas 我添加了更新
  • @Stu 我要么抛出异常并返回返回的 sql 错误,要么使用 select,如果存在,则抛出异常

标签: java mysql jdbc


【解决方案1】:

我假设您指的是 INSERT 语句的受影响的行。 INSERT 语句本身没有结果。 INSERT 语句影响的行数是插入的行数。

您可以从 SELECT 结果集中插入:

INSERT INTO mytable (col1, col2, col3) SELECT col1, col2, col3 FROM ...

该 SELECT 可能有零行、一行或多行的结果。

如果您使用 INSERT IGNORE 并且某些行成功而其他行由于错误而被忽略,则它也可能不是 SELECT 结果的行数。

您也可以在不使用 SELECT 语句的情况下创建插入多行的 INSERT 语句:

INSERT INTO mytable (col1, col2, col3) 
VALUES (1,2,3), (4,5,6), (7,8,9), ...

这也可以报告受影响的行数超过 1。

【讨论】:

  • 如果我们只坚持 1 次插入,它是否会返回任何不是 1 且不是异常的东西?
  • @stackerstack No
  • 异常是客户端语言的事情。如果插入行失败,则受影响的行数为零。
  • @BillKarwin 这个问题是在 JDBC API 的上下文中提出的。
  • 如果只计算会报告 1 行受影响的场景,那么它们当然只会返回 1! :-)
猜你喜欢
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2010-09-16
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多