最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決java.sql.SQLException:索引中丟失 IN或OUT 參數(shù)::x問(wèn)題

 更新時(shí)間:2023年12月13日 16:46:29   作者:bisal(Chen Liu)  
這篇文章主要介紹了解決java.sql.SQLException:索引中丟失 IN或OUT 參數(shù)::x問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java.sql.SQLException:索引中丟失 IN或OUT 參數(shù)::x

使用JDBC時(shí),會(huì)有這么一個(gè)錯(cuò)誤:java.sql.SQLException: 索引中丟失 IN或OUT 參數(shù)::x

如下:

示例中insertLog.execute();這行會(huì)拋出這個(gè)異常:

String logSQL = "insert into tbl_obj(id, obj, type, cont, proposer, operator, date, remark) "
                       + "values(seq_tot.nextval, ?, ?, ?, ?, ?, SYSDATE, ?)";
insertLog = conn.prepareStatement(logSQL);
insertLog.setString(2, trace.getObj());
insertLog.setString(3, trace.getType());
insertLog.setString(4, trace.getCont());
insertLog.setString(5, trace.getProposer());
insertLog.setString(6, trace.getOperator());
insertLog.setString(8, trace.getRemark());
insertLog.execute();

檢索了一些帖子,對(duì)于這種問(wèn)題,指出的原因很多

  • 全角半角引起;
  • 參數(shù)過(guò)多;
  • 配置文件和數(shù)據(jù)庫(kù)字段類型不一致;
  • 或是數(shù)據(jù)庫(kù)的索引問(wèn)題等”

根據(jù)錯(cuò)誤提示,歸結(jié)為兩點(diǎn)

(1) 索引是否有問(wèn)題?(“索引中丟失”)

(2) 字段賦值是否與數(shù)據(jù)庫(kù)字段類型匹配?

  • 對(duì)于(1)的論證:

查看這張表的索引,這張表是以ID作為主鍵,沒(méi)有其他索引,因此只有一個(gè)主鍵索引,查看狀態(tài)也是VALID的,沒(méi)有錯(cuò)誤:

SQL> select index_name, status from user_indexes where table_name='TBL_OBJ_TRACE';
 
INDEX_NAME                     STATUS
------------------------------ --------
SYS_C0031302                   VALID
  • 對(duì)于(2)的論證:

首先看了trace的set/get方法中對(duì)字段類型的定義,都是String,對(duì)應(yīng)庫(kù)中的字段類型都是VARCHAR2,沒(méi)有差別。

其次再看setString,和VALUES中字段是對(duì)應(yīng)的啊。

其實(shí)問(wèn)題就出在這了,看下setString方法的解釋:

void java.sql.PreparedStatement.setString(int parameterIndex, String x) throws SQLException
 
Sets the designated parameter to the given Java String value. The driver converts this to an SQL VARCHAR or LONGVARCHAR value (depending on the argument's size relative to the driver's limits on VARCHAR values) when it sends it to the database.
 
Parameters:
parameterIndex the first parameter is 1, the second is 2, ...
x the parameter value
Throws:
SQLException - if parameterIndex does not correspond to a parameter marker in the SQL statement; if a database access error occurs or this method is called on a closed PreparedStatement

可以看到第一個(gè)參數(shù)parameterIndex,參數(shù)索引,parameterIndex does not correspond to a parameter marker in the SQL statement(如果沒(méi)有對(duì)應(yīng)到SQL語(yǔ)句中的參數(shù)標(biāo)識(shí)符),則會(huì)拋出SQLException異常。

SQL語(yǔ)句中values(seq_tot.nextval, ?, ?, ?, ?, ?, SYSDATE, ?)的參數(shù)標(biāo)識(shí)符一共6個(gè),setString同樣是6個(gè),但順序不對(duì),setString中第一個(gè)參數(shù)的索引序號(hào)是要和SQL語(yǔ)句中是一致的,并不是SQL語(yǔ)句中這里VALUES字段的位置,而應(yīng)該是SQL語(yǔ)句VALUES中參數(shù)標(biāo)識(shí)符的序號(hào)。

改為如下格式就對(duì)了:

String logSQL = "insert into tbl_obj(id, obj, type, cont, proposer, operator, date, remark) "
                       + "values(seq_tot.nextval, ?, ?, ?, ?, ?, SYSDATE, ?)";
insertLog = conn.prepareStatement(logSQL);
insertLog.setString(1, trace.getObj());
insertLog.setString(2, trace.getType());
insertLog.setString(3, trace.getCont());
insertLog.setString(4, trace.getProposer());
insertLog.setString(5, trace.getOperator());
insertLog.setString(6, trace.getRemark());
insertLog.execute();

總結(jié)

JDBC的這個(gè)報(bào)錯(cuò),提示信息很晦澀,但這個(gè)錯(cuò)誤感覺(jué)是屬于那種碰過(guò)一次之后,基本下次就能知道錯(cuò)誤的范圍,排查起來(lái)應(yīng)該也比較順暢了。

例如:

索引是否有問(wèn)題、代碼中的字段類型和表中字段類型是否一致、代碼中使用的參數(shù)索引和SQL語(yǔ)句中的參數(shù)標(biāo)識(shí)符是否一致(個(gè)數(shù)、順序等)。

好了,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中String字符串常量池和intern方法源碼分析

    Java中String字符串常量池和intern方法源碼分析

    在之前的文章中,小編給大家介紹了String字符串的不可變性及其實(shí)現(xiàn)原理,其中給大家提到了字符串常量池的概念,那么什么是常量池,String字符串與常量池有什么關(guān)系,本文給大家嘮嘮字符串常量池及String#intern()方法的作用,需要的朋友可以參考下
    2023-05-05
  • java開(kāi)發(fā)主流定時(shí)任務(wù)解決方案全橫評(píng)詳解

    java開(kāi)發(fā)主流定時(shí)任務(wù)解決方案全橫評(píng)詳解

    這篇文章主要為大家介紹了java開(kāi)發(fā)主流定時(shí)任務(wù)解決方案全橫評(píng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • java棧實(shí)現(xiàn)二叉樹(shù)的非遞歸遍歷的示例代碼

    java棧實(shí)現(xiàn)二叉樹(shù)的非遞歸遍歷的示例代碼

    這篇文章主要介紹了java棧實(shí)現(xiàn)二叉樹(shù)的非遞歸遍歷,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java數(shù)據(jù)類型的規(guī)則

    Java數(shù)據(jù)類型的規(guī)則

    這篇文章主要介紹了Java數(shù)據(jù)類型的規(guī)則的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • Java中ArrayList初始化的四種方法詳解

    Java中ArrayList初始化的四種方法詳解

    這篇文章主要介紹了Java中ArrayList初始化的四種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • springcloud-gateway整合jwt+jcasbin實(shí)現(xiàn)權(quán)限控制的詳細(xì)過(guò)程

    springcloud-gateway整合jwt+jcasbin實(shí)現(xiàn)權(quán)限控制的詳細(xì)過(guò)程

    這篇文章主要介紹了springcloud-gateway整合jwt+jcasbin實(shí)現(xiàn)權(quán)限控制,基于springboot+springcloud+nacos的簡(jiǎn)單分布式項(xiàng)目,項(xiàng)目交互采用openFeign框架,單獨(dú)提取出來(lái)成為一個(gè)獨(dú)立的model,需要的朋友可以參考下
    2023-02-02
  • Java ArrayList.add 的實(shí)現(xiàn)方法

    Java ArrayList.add 的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java ArrayList.add 的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 詳解Java中Hibernate的基本原理

    詳解Java中Hibernate的基本原理

    持久化是將程序數(shù)據(jù)在持久狀態(tài)和瞬時(shí)狀態(tài)間轉(zhuǎn)換的機(jī)制。JDBC就是一種持久化機(jī)制。文件IO也是一種持久化機(jī)制。下面通過(guò)本文給大家介紹Java中Hibernate的基本原理,需要的朋友參考下吧
    2017-09-09
  • Spring依賴注入Bean流程深入解析

    Spring依賴注入Bean流程深入解析

    本文主要介紹了Spring框架中依賴注入和Bean創(chuàng)建流程,包括注入方式、生命周期、代理模式、注入流程、構(gòu)造函數(shù)參數(shù)處理以及創(chuàng)建Bean的詳細(xì)過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • java常用工具類 UUID、Map工具類

    java常用工具類 UUID、Map工具類

    這篇文章主要為大家詳細(xì)介紹了Java常用工具類,包括UUID工具類、Map工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評(píng)論

临邑县| 石棉县| 武城县| 呼玛县| 家居| 吴忠市| 巩留县| 桂阳县| 泰安市| 江西省| 浦城县| 通榆县| 巩留县| 临朐县| 商南县| 贞丰县| 什邡市| 深水埗区| 呼玛县| 河池市| 子长县| 古蔺县| 伊通| 贺州市| 澄迈县| 涞水县| 石楼县| 周宁县| 上杭县| 莱州市| 阳朔县| 眉山市| 中山市| 云南省| 封丘县| 韶关市| 广元市| 邳州市| 宣城市| 蛟河市| 芷江|