欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java.sql.SQLException問題解決以及注意事項(xiàng)

 更新時(shí)間:2023年07月25日 15:12:12   作者:程序員洲洲  
這篇文章主要給大家介紹了關(guān)于java.sql.SQLException問題解決以及注意事項(xiàng)的相關(guān)資料,這個(gè)問題其實(shí)很好解決,文中通過圖文將解決的辦法介紹的很詳細(xì),需要的朋友可以參考下

一、Bug描述

今天做項(xiàng)目開發(fā)的時(shí)候,發(fā)現(xiàn)了這個(gè)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)

二、定位報(bào)錯(cuò)點(diǎn)

ps.executeUpdate(); //  problem is here

發(fā)現(xiàn)好問題的報(bào)錯(cuò)后,就可以解決了。

三、解決方案

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

四、注意事項(xiàng)及原理

Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。

使用哪一個(gè)方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。

方法executeQuery用于產(chǎn)生單個(gè)結(jié)果集的語句,例如 SELECT 語句。 被使用最多的執(zhí)行 SQL 語句的方法是 executeQuery。這個(gè)方法被用來執(zhí)行 SELECT 語句,它幾乎是使用最多的 SQL 語句。

方法executeUpdate:用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個(gè)整數(shù),指示受影響的行數(shù)(即更新計(jì)數(shù))。對(duì)于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。

使用executeUpdate方法是因?yàn)樵?createTableCoffees 中的 SQL 語句是 DDL (數(shù)據(jù)定義語言)語句。創(chuàng)建表,改變表,刪除表都是 DDL 語句的例子,要用 executeUpdate 方法來執(zhí)行。你也可以從它的名字里看出,方法 executeUpdate 也被用于執(zhí)行更新表 SQL 語句。實(shí)際上,相對(duì)于創(chuàng)建表來說,executeUpdate 用于更新表的時(shí)間更多,因?yàn)楸碇恍枰獎(jiǎng)?chuàng)建一次,但經(jīng)常被更新。

方法execute用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語句。

execute方法應(yīng)該僅在語句能返回多個(gè)ResultSet對(duì)象、多個(gè)更新計(jì)數(shù)或ResultSet對(duì)象與更新計(jì)數(shù)的組合時(shí)使用。當(dāng)執(zhí)行某個(gè)已存儲(chǔ)過程 或動(dòng)態(tài)執(zhí)行未知 SQL 字符串(即應(yīng)用程序程序員在編譯時(shí)未知)時(shí),有可能出現(xiàn)多個(gè)結(jié)果的情況,盡管這種情況很少見。

因?yàn)榉椒?execute 處理非常規(guī)情況,所以獲取其結(jié)果需要一些特殊處理并不足為怪。例如,假定已知某個(gè)過程返回兩個(gè)結(jié)果集,則在使用方法 execute 執(zhí)行該過程后,必須調(diào)用方法 getResultSet 獲得第一個(gè)結(jié)果集,然后調(diào)用適當(dāng)?shù)?getXXX 方法獲取其中的值。要獲得第二個(gè)結(jié)果集,需要先調(diào)用 getMoreResults 方法,然后再調(diào)用 getResultSet 方法。如果已知某個(gè)過程返回兩個(gè)更新計(jì)數(shù),則首先調(diào)用方法getUpdateCount,然后調(diào)用 getMoreResults,并再次調(diào)用 getUpdateCount。

對(duì)于不知道返回內(nèi)容,則情況更為復(fù)雜。如果結(jié)果是 ResultSet 對(duì)象,則方法 execute 返回 true;如果結(jié)果是 Java int,則返回 false。如果返回 int,則意味著結(jié)果是更新計(jì)數(shù)或執(zhí)行的語句是 DDL 命令。在調(diào)用方法 execute 之后要做的第一件事情是調(diào)用 getResultSet 或 getUpdateCount。調(diào)用方法 getResultSet 可以獲得兩個(gè)或多個(gè) ResultSet 對(duì)象中第一個(gè)對(duì)象;或調(diào)用方法 getUpdateCount 可以獲得兩個(gè)或多個(gè)更新計(jì)數(shù)中第一個(gè)更新計(jì)數(shù)的內(nèi)容。

當(dāng) SQL 語句的結(jié)果不是結(jié)果集時(shí),則方法 getResultSet 將返回 null。這可能意味著結(jié)果是一個(gè)更新計(jì)數(shù)或沒有其它結(jié)果。在這種情況下,判斷 null 真正含義的唯一方法是調(diào)用方法 getUpdateCount,它將返回一個(gè)整數(shù)。這個(gè)整數(shù)為調(diào)用語句所影響的行數(shù);如果為 -1 則表示結(jié)果是結(jié)果集或沒有結(jié)果。如果方法 getResultSet 已返回 null(表示結(jié)果不是 ResultSet 對(duì)象),則返回值 -1 表示沒有其它結(jié)果。

總結(jié):寫在后面的話

到此這篇關(guān)于java.sql.SQLException問題解決以及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)java.sql.SQLException問題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring源碼完美導(dǎo)入IDEA的過程

    Spring源碼完美導(dǎo)入IDEA的過程

    正值春節(jié)假期,小伙伴私信我idea導(dǎo)入spring源碼的過程,今天抽空給大家整理一篇教程幫助大家學(xué)習(xí)Spring源碼完美導(dǎo)入IDEA的詳細(xì)過程,感興趣的朋友一起看看吧
    2022-02-02
  • Java診斷工具Arthas安裝與卸載的詳細(xì)指南

    Java診斷工具Arthas安裝與卸載的詳細(xì)指南

    Arthas?是阿里巴巴開源的一款強(qiáng)大的?Java?診斷工具,能夠幫助開發(fā)者在不重啟應(yīng)用的情況下,實(shí)時(shí)監(jiān)控和診斷?Java?應(yīng)用的運(yùn)行狀態(tài),本文將詳細(xì)介紹?Arthas?的多種安裝方式、使用方法以及卸載步驟,幫助開發(fā)者快速上手并應(yīng)用于實(shí)際開發(fā)中,需要的朋友可以參考下
    2025-02-02
  • Java動(dòng)態(tài)顯示文件上傳進(jìn)度實(shí)現(xiàn)代碼

    Java動(dòng)態(tài)顯示文件上傳進(jìn)度實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Java動(dòng)態(tài)顯示文件上傳進(jìn)度實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java算法之歸并排序舉例詳解

    Java算法之歸并排序舉例詳解

    這篇文章主要介紹了Java算法之歸并排序的相關(guān)資料,歸并排序是一種遞歸排序算法,通過將數(shù)組分成更小的子數(shù)組,遞歸地排序這些子數(shù)組,然后將它們合并成有序數(shù)組,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • SpringCloud融入Python的實(shí)現(xiàn)

    SpringCloud融入Python的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud融入Python的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解Spring框架之基于Restful風(fēng)格實(shí)現(xiàn)的SpringMVC

    詳解Spring框架之基于Restful風(fēng)格實(shí)現(xiàn)的SpringMVC

    這篇文章主要介紹了詳解Spring框架之基于Restful風(fēng)格實(shí)現(xiàn)的SpringMVC,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java聊天室之實(shí)現(xiàn)聊天室客戶端功能

    Java聊天室之實(shí)現(xiàn)聊天室客戶端功能

    這篇文章主要為大家詳細(xì)介紹了Java簡易聊天室之實(shí)現(xiàn)聊天室客戶端功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下
    2022-11-11
  • Java類加載的過程詳解

    Java類加載的過程詳解

    這篇文章主要介紹了深入理解Java 類加載全過程的相關(guān)資料,小編覺得寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • java8中parallelStream性能測(cè)試及結(jié)果分析

    java8中parallelStream性能測(cè)試及結(jié)果分析

    本篇文章給大家用代碼實(shí)例做了segmentfaultjava8中parallelStream性能測(cè)試,并對(duì)測(cè)試結(jié)果做了說明,需要的朋友學(xué)習(xí)下吧。
    2018-01-01
  • SpringBoot中Redisson延遲隊(duì)列的示例

    SpringBoot中Redisson延遲隊(duì)列的示例

    延時(shí)隊(duì)列是一種常見的需求,延時(shí)隊(duì)列允許我們延遲處理某些任務(wù),本文主要介紹了Redisson延遲隊(duì)列的示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06

最新評(píng)論