日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【PostgreSQL保存】java.io.IOException: Tried to send an out-of-range integer as a 2-byte value 问题分析+解决方法

發布時間:2024/10/6 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【PostgreSQL保存】java.io.IOException: Tried to send an out-of-range integer as a 2-byte value 问题分析+解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.問題分析

項目里有一個從MySQL導入PostgreSQL然后利用GIS相關插件計算空間數據的定時任務,上線某地市沒有任何問題,后期上線到一個大城市,定時任務報錯 java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: xxxxx,這里貼一下源碼:

public void sendInteger2(int val) throws IOException {if (val >= -32768 && val <= 32767) {this.int2Buf[0] = (byte)(val >>> 8);this.int2Buf[1] = (byte)val;this.pgOutput.write(this.int2Buf);} else {throw new IOException("Tried to send an out-of-range integer as a 2-byte value: " + val);}}

大白話解釋是:試圖以2字節值的形式發送一個超出范圍的整數 xxxxx,第一時間我沒有反應過來,查詢了MySQL數據庫的記錄數,也就1w+條,怎么也超不過32767啊,后來才知道32767是PostgreSQL對于SQL語句的參數數量限制,當時往PostgreSQL入庫的SQL類似這種:

<insert id="batchInsertXXX" parameterType="xxx.common.persistence.model.xxxGis">insert into xxx_gis (id, name, index, geom) values<foreach collection="list" index="index" item="item" separator=",">( #{item.id}, #{item.name}, #{item.index}, ST_GeomFromText(#{item.geom}) )</foreach> </insert>

然后一算1w+*4可不超過32767嘛!

2.解決方法代碼

我查詢了一下網絡,遇到這個問題的小伙伴還是不少的,大家的方法就是分批導入,代碼如下。

public void insertBatch(List<Object> list){int numberBatch = 32767; // PostgreSQL每一次插入最大參數量double number = list.size() * 4.0 / numberBatch; // 4.0是每條插入語句的參數個數int n = ((Double)Math.ceil(number)).intValue(); for(int i = 0; i < n; i++){int end = numberBatch * (i + 1);if(end > list.size()){ end = list.size(); }List<Object> insertList = list.subList(numberBatch * i , end);// 這里調用批量插入程程序將insertList保存}}

這個是臨時解決方案,里邊把每條插入語句的參數個數值固定了,可以將這個方法封裝,然后把參數個數參數化。

總結

以上是生活随笔為你收集整理的【PostgreSQL保存】java.io.IOException: Tried to send an out-of-range integer as a 2-byte value 问题分析+解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。