当前位置: 首页 > 知识库问答 >
问题:

如何判断JDBC执行中更改的行数

段干茂实
2023-03-14

我不确定如何获得SQL执行所影响的行数。

我确实喜欢这样:

boolean isResultSet = statement.execute(arbitrarySQLCommand);

返回:

(1)SQL数据操作语言(DML)语句的行计数,或(2)0表示不返回任何内容的SQL语句

啊!
我希望是:

  1. ArtitrarySQLCommand中提取第一个单词。字以空格或EOL行字符结束。
  2. 如果该单词(忽略大小写)是INSERT、UPDATE或DELETE,那么它是一个DML语句,并且getupdateCount()的输出是相关的,否则getupdateCount()的输出是无关的。

丑陋和容易出错。但这个问题唯一可能的解决方案是。-(

共有1个答案

仲孙飞文
2023-03-14

您所能做的最好的事情就是检查SQL语句

Set<String> dmlCommands = new HashSet<String>() {
  {
    add("UPDATE"); add("INSERT"); add("DELETE"); //Add more DML commands ....
  }
};
int updateCount = statement.getUpdateCount();
for(String dml : dmlCommands) {
    if(arbitrarySQLCommand.toUpperCase().contains(dml) && updateCount == 0) {
        updateCount = -1;
        break;
    }
}
 类似资料:
  • 问题内容: 我不确定如何获得受SQL执行影响的行数。 我喜欢这样: 我可以获得该方法影响的行数。很好 我的问题是更新计数为零时。这可能意味着: 这是DML语句,但不影响任何行。受影响的零行是有效的响应。我只是说某些条件没有得到满足。 这是一个非DML语句(很可能是DDL语句)..根据定义,它不会更改行,因此更新计数始终为零(duh!)。或者换种说法: 更新计数 的概念对于此类语句毫无意义。 我想要

  • 问题内容: 我知道设计不能通过中断来控制其执行,但是我想其中有些人可能会遇到此问题。s是组成异步执行的一种非常好的方法,但是考虑到当您希望取消future时中断或停止基础执行时,我们该怎么做?还是我们必须接受,任何取消或手动完成的操作都不会影响正在执行该操作的线程? 我认为,那显然是一项无用的工作,需要花费执行者的时间。我想知道在这种情况下哪种方法或设计可能会有所帮助? 更新 这是一个简单的测试

  • 我知道设计无法通过中断来控制其执行,但我想你们中的一些人可能有这个问题。s是组成异步执行的非常好的方法,但考虑到当未来被取消时您希望底层执行被中断或停止的情况,我们如何做到这一点?或者我们必须接受任何取消或手动完成的都不会影响在那里工作以完成它的线程? 在我看来,这显然是一项无用的工作,需要执行者的时间。我想知道在这种情况下,什么方法或设计可能会有所帮助? 更新 这是一个简单的测试

  • 我试图建模双向亲子设计,有秩序的孩子。 从父级中删除子级(例如,子级#2/3子级)时,hibernate生成的sql会导致唯一的约束冲突,因为“更新”(同级)是在“删除”(目标)之前执行的。 我使用的RDBMS(H2)不支持延迟约束。除了以下选项外,我还有哪些选择? 从架构中删除唯一约束 自己显式管理排序,而不是依赖hibernate 有什么方法可以让Hibernate生成sql,在更新之前删除吗

  • 我正在尝试使用JavaDOM解析器为XML文档中的许多标记建立索引,以从中形成类似MIB的结构(例如 我希望将模块映射到1,将容器映射到1.1,将列表映射到1.1.1,将叶映射到1.1.1.1,将另一个叶映射到1.1.1.2(我已经有了这样做的方法),但在嵌套相同命名的XML标记时,我遇到了问题。以下是我创建的函数——为了简单起见,只需打印属性名 下面是我试图解析的XML示例: 当我在这个程序上运

  • 问题内容: 我最近在玩go,尝试制作一些服务器来响应tcp连接上的客户端。 我的问题是我该如何干净地关闭服务器并中断在以下调用中当前“被阻止”的go例程 func(* TCPListener)接受吗? 根据接受文件 Accept在侦听器接口中实现Accept方法;它等待下一个调用并返回通用Conn。 错误也很少被记录下来。 问题答案: 这是我一直在寻找的东西。也许将来会帮助某人。注意使用selec