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

Oracle+Mybatis的foreach insert批量插入報錯的快速解決辦法

 更新時間:2016年08月26日 16:50:00   投稿:mrr  
本文給大家介紹Oracle+Mybatis的foreach insert批量插入報錯的快速解決辦法,非常不錯,具有參考借鑒價值,感興趣的朋友參考下吧

最近做一個批量導入的需求,將多條記錄批量插入數(shù)據(jù)庫中。

解決思路:在程序中封裝一個List集合對象,然后把該集合中的實體插入到數(shù)據(jù)庫中,因為項目使用了MyBatis,所以打算使用MyBatis的foreach功能進行批量插入。期間遇到了“SQL 命令未正確結(jié)束 ”的錯誤,最終解決,記錄下來供以后查閱和學習。

首先,在網(wǎng)上參考了有關Mybatis的foreach insert的資料,具體如下:

foreach的主要用在構(gòu)建in條件中,它可以在SQL語句中進行迭代一個集合。

foreach元素的屬性主要有 item,index,collection,open,separator,close。

item表示集合中每一個元素進行迭代時的別名,index指定一個名字,用于表示在迭代過程中,每次迭代到的位置,open表示該語句以什么開始,separator表示在每次進行迭代之間以什么符號作為分隔符,close表示以什么結(jié)束,在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:

1.如果傳入的是單參數(shù)且參數(shù)類型是一個List的時候,collection屬性值為list

2.如果傳入的是單參數(shù)且參數(shù)類型是一個array數(shù)組的時候,collection的屬性值為array

3.如果傳入的參數(shù)是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數(shù)也可以封裝成map

然后,照葫蘆畫瓢寫了如下的xml文件,

xxxMapper.xml文件:

<insert id="addSupCity" parameterType="java.util.List">
<selectKey keyProperty="cityId" order="BEFORE" resultType="String">
<![CDATA[SELECT SEQ_OCL_SUPCITY.NEXTVAL FROM dual]]>
</selectKey>
INSERT INTO T_OCL_SUPCITY
(CITY_ID,CITY_CODE, CITY_NAME, AREA_DESC, SUP_ID, STAT)
VALUES 
<foreach collection="list" item="item" index="index" separator=","> 
(
#{item.cityId,jdbcType=VARCHAR},
#{item.cityCode,jdbcType=VARCHAR},
#{item.cityName,jdbcType=VARCHAR},
#{item.areaDesc,jdbcType=VARCHAR},
#{item.supId,jdbcType=VARCHAR},
#{item.stat,jdbcType=VARCHAR}
)
</foreach>
</insert>

但是運行起來后就一直報錯,報錯信息如下:

### SQL: INSERT INTO T_OCL_SUPCITY
(CITY_ID,CITY_CODE, CITY_NAME, AREA_DESC, SUP_ID, STAT) VALUES (?,?,?,?,?),(?,?,?,?,?)
### Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正確結(jié)束

把SQL復制出來在PL/SQL中運行也是報同樣的錯,如上也可以看出,使用批量插入執(zhí)行的SQL語句等價于: INSERT INTO T_OCL_SUPCITY (CITY_ID,CITY_CODE, CITY_NAME, AREA_DESC, SUP_ID, STAT) VALUES (?,?,?,?,?),(?,?,?,?,?),而在oracle中用insert into xxx values (xxx,xxx),(xxx,xxx) 這種語法是通不過的 。再回過頭去看那篇文章,發(fā)現(xiàn)這是適用于MySQL的,不適用于Oracle,因此把xml文件修改一下:

<insert id="addSupCity" parameterType="java.util.List">
INSERT INTO T_OCL_SUPCITY
(CITY_ID,CITY_CODE, CITY_NAME, AREA_DESC, SUP_ID, STAT)
SELECT SEQ_OCL_SUPCITY.NEXTVAL CITY_ID, A.*
FROM(
<foreach collection="list" item="item" index="index" separator="UNION ALL">
SELECT 
#{item.cityCode,jdbcType=VARCHAR} CITY_CODE,
#{item.cityName,jdbcType=VARCHAR} CITY_NAME,
#{item.areaDesc,jdbcType=VARCHAR} AREA_DESC,
#{item.supId,jdbcType=VARCHAR} SUP_ID,
#{item.stat,jdbcType=VARCHAR} STAT
FROM dual
</foreach>
)A
</insert>

運行通過。

在Oracle的版本中,有幾點需要注意的:

1.SQL中沒有VALUES;

2.<foreach>標簽中的(selece ..... from dual);

3.<foreach>標簽中的separator的屬性為"UNION ALL",將查詢合并結(jié)果集。

以上所述是小編給大家介紹的Oracle+Mybatis的foreach insert功能批量插入報錯的快速解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • SpringBoot實戰(zhàn):Spring如何找到對應轉(zhuǎn)換器優(yōu)雅使用枚舉參數(shù)

    SpringBoot實戰(zhàn):Spring如何找到對應轉(zhuǎn)換器優(yōu)雅使用枚舉參數(shù)

    這篇文章主要介紹了SpringBoot實戰(zhàn)中Spring是如何找到對應轉(zhuǎn)換器優(yōu)雅的使用枚舉參數(shù),文中附有詳細的實例代碼有需要的朋友可以參考下,希望可以有所幫助
    2021-08-08
  • Spring Boot整合ElasticSearch實現(xiàn)多版本兼容的方法詳解

    Spring Boot整合ElasticSearch實現(xiàn)多版本兼容的方法詳解

    簡單說,ElasticSearch(簡稱 ES)是搜索引擎,是結(jié)構(gòu)化數(shù)據(jù)的分布式搜索引擎。下面這篇文章主要給大家介紹了關于Spring Boot整合ElasticSearch實現(xiàn)多版本兼容的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-05-05
  • java實現(xiàn)快速排序圖文詳解

    java實現(xiàn)快速排序圖文詳解

    網(wǎng)上關于快速排序的算法原理和算法實現(xiàn)都比較多,不過java是實現(xiàn)并不多,而且部分實現(xiàn)很難理解,和思路有點不搭調(diào)。所以整理了這篇文章。如果有不妥之處還請建議
    2021-08-08
  • Java細數(shù)IO流底層原理到方法使用

    Java細數(shù)IO流底層原理到方法使用

    IO主要用于設備之間的數(shù)據(jù)傳輸,Java將操作數(shù)據(jù)流的功能封裝到了IO包中,這篇文章主要給大家介紹了關于Java新手學習之IO流簡單使用的相關資料,需要的朋友可以參考下
    2022-05-05
  • 詳解java中if語句和switch的使用

    詳解java中if語句和switch的使用

    這篇文章主要介紹了java中if語句和switch的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java多線程讀寫鎖ReentrantReadWriteLock類詳解

    Java多線程讀寫鎖ReentrantReadWriteLock類詳解

    本文詳細講解了Java多線程讀寫鎖ReentrantReadWriteLock類,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • Java快速排序案例講解

    Java快速排序案例講解

    這篇文章主要介紹了Java快速排序案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • resubmit漸進式防重復提交框架示例

    resubmit漸進式防重復提交框架示例

    這篇文章主要為大家介紹了resubmit漸進式防重復提交框架示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 項目管理利器-Maven(Windows安裝)圖文教程

    項目管理利器-Maven(Windows安裝)圖文教程

    下面小編就為大家?guī)硪黄椖抗芾砝?Maven(Windows安裝)圖文教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • SpringSecurity請求授權(quán)規(guī)則配置與注解詳解

    SpringSecurity請求授權(quán)規(guī)則配置與注解詳解

    這篇文章主要介紹了SpringSecurity請求授權(quán)規(guī)則配置與注解詳解,我們常使用@Secured與@PreAuthorize兩個注解在進入方法前進行角色、權(quán)限的控制,進入方法前數(shù)據(jù)的過濾@PreFilter注解偶爾會看到,需要的朋友可以參考下
    2023-12-12

最新評論