java.sql.SQLException问题解决以及注意事项

 更新时间:2023年07月25日 15:12:12   作者:程序员洲洲  
这篇文章主要给大家介绍了关于java.sql.SQLException问题解决以及注意事项的相关资料,这个问题其实很好解决,文中通过图文将解决的办法介绍的很详细,需要的朋友可以参考下

一、Bug描述

今天做项目开发的时候,发现了这个Bug,话不多说,直接定位Bug原理+解决!

java.sql.SQLException: 
java.lang.RuntimeException: java.sql.SQLException: Can not issue executeUpdate() for SELECTs
     at com.infuze.service.subscription.workflow.SyncSubscriptionTrackerWorkflow.executeProcess(SyncSubscriptionTrackerWorkflow.java:130)
     at com.infuze.service.workflow.WorkflowExecutor.execute(WorkflowExecutor.java:24)
     at com.infuze.service.subscription.xml.SubscriptionXmlService.syncTracker(SubscriptionXmlService.java:140)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at Caused by: java.sql.SQLException: Can not issue executeUpdate() for SELECTs
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2373)

二、定位报错点

ps.executeUpdate(); //  problem is here

发现好问题的报错后,就可以解决了。

三、解决方案

ps.execute();  //代替ps.executeUpdate

四、注意事项及原理

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。

使用哪一个方法由 SQL 语句所产生的内容决定。

方法executeQuery用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。

方法executeUpdate:用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

使用executeUpdate方法是因为在 createTableCoffees 中的 SQL 语句是 DDL (数据定义语言)语句。创建表,改变表,删除表都是 DDL 语句的例子,要用 executeUpdate 方法来执行。你也可以从它的名字里看出,方法 executeUpdate 也被用于执行更新表 SQL 语句。实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。

方法execute用于执行返回多个结果集、多个更新计数或二者组合的语句。

execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。当执行某个已存储过程 或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。

因为方法 execute 处理非常规情况,所以获取其结果需要一些特殊处理并不足为怪。例如,假定已知某个过程返回两个结果集,则在使用方法 execute 执行该过程后,必须调用方法 getResultSet 获得第一个结果集,然后调用适当的 getXXX 方法获取其中的值。要获得第二个结果集,需要先调用 getMoreResults 方法,然后再调用 getResultSet 方法。如果已知某个过程返回两个更新计数,则首先调用方法getUpdateCount,然后调用 getMoreResults,并再次调用 getUpdateCount。

对于不知道返回内容,则情况更为复杂。如果结果是 ResultSet 对象,则方法 execute 返回 true;如果结果是 Java int,则返回 false。如果返回 int,则意味着结果是更新计数或执行的语句是 DDL 命令。在调用方法 execute 之后要做的第一件事情是调用 getResultSet 或 getUpdateCount。调用方法 getResultSet 可以获得两个或多个 ResultSet 对象中第一个对象;或调用方法 getUpdateCount 可以获得两个或多个更新计数中第一个更新计数的内容。

当 SQL 语句的结果不是结果集时,则方法 getResultSet 将返回 null。这可能意味着结果是一个更新计数或没有其它结果。在这种情况下,判断 null 真正含义的唯一方法是调用方法 getUpdateCount,它将返回一个整数。这个整数为调用语句所影响的行数;如果为 -1 则表示结果是结果集或没有结果。如果方法 getResultSet 已返回 null(表示结果不是 ResultSet 对象),则返回值 -1 表示没有其它结果。

总结:写在后面的话

到此这篇关于java.sql.SQLException问题解决以及注意事项的文章就介绍到这了,更多相关java.sql.SQLException问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring源码完美导入IDEA的过程

    Spring源码完美导入IDEA的过程

    正值春节假期,小伙伴私信我idea导入spring源码的过程,今天抽空给大家整理一篇教程帮助大家学习Spring源码完美导入IDEA的详细过程,感兴趣的朋友一起看看吧
    2022-02-02
  • Java诊断工具Arthas安装与卸载的详细指南

    Java诊断工具Arthas安装与卸载的详细指南

    Arthas 是阿里巴巴开源的一款强大的 Java 诊断工具,能够帮助开发者在不重启应用的情况下,实时监控和诊断 Java 应用的运行状态,本文将详细介绍 Arthas 的多种安装方式、使用方法以及卸载步骤,帮助开发者快速上手并应用于实际开发中,需要的朋友可以参考下
    2025-02-02
  • Java动态显示文件上传进度实现代码

    Java动态显示文件上传进度实现代码

    这篇文章主要为大家详细介绍了Java动态显示文件上传进度实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Java算法之归并排序举例详解

    Java算法之归并排序举例详解

    这篇文章主要介绍了Java算法之归并排序的相关资料,归并排序是一种递归排序算法,通过将数组分成更小的子数组,递归地排序这些子数组,然后将它们合并成有序数组,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • SpringCloud融入Python的实现

    SpringCloud融入Python的实现

    这篇文章主要介绍了SpringCloud融入Python的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 详解Spring框架之基于Restful风格实现的SpringMVC

    详解Spring框架之基于Restful风格实现的SpringMVC

    这篇文章主要介绍了详解Spring框架之基于Restful风格实现的SpringMVC,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java聊天室之实现聊天室客户端功能

    Java聊天室之实现聊天室客户端功能

    这篇文章主要为大家详细介绍了Java简易聊天室之实现聊天室客户端功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-11-11
  • Java类加载的过程详解

    Java类加载的过程详解

    这篇文章主要介绍了深入理解Java 类加载全过程的相关资料,小编觉得写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • java8中parallelStream性能测试及结果分析

    java8中parallelStream性能测试及结果分析

    本篇文章给大家用代码实例做了segmentfaultjava8中parallelStream性能测试,并对测试结果做了说明,需要的朋友学习下吧。
    2018-01-01
  • SpringBoot中Redisson延迟队列的示例

    SpringBoot中Redisson延迟队列的示例

    延时队列是一种常见的需求,延时队列允许我们延迟处理某些任务,本文主要介绍了Redisson延迟队列的示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06

最新评论