該問題的由來:
見個人另外一篇文章(http://my.oschina.net/u/1462678/blog/227170)那個visio圖片
僞sql語句: (database1 和 database2 中的table1 相同的結構,重要的是有個auto_increment 性質的id 列)
java
select *from database1.table1 insert into table1 values(null,value1,value2,value3,value4);
table1的建表語句:
mysql
CREATE TABLE `table1` ( `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT , `DNT` datetime DEFAULT NULL, `T1` int(10) DEFAULT NULL, `T2` int(10) DEFAULT NULL, `T3` int(10) DEFAULT NULL, `T4` int(10) DEFAULT NULL, `T5` int(10) DEFAULT NULL, `T6` int(10) DEFAULT NULL, `T7` int(10) DEFAULT NULL, `T8` int(10) DEFAULT NULL, `T9` int(10) DEFAULT NULL, `T10` int(10) DEFAULT NULL, `W1` int(10) DEFAULT NULL, `W2` int(10) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT =1 DEFAULT CHARSET=utf8;
table1中的數據量:
8萬多條數據,20M實際大小
報錯:sql
java.sql.SQLException: Incorrect integer value: 'null' for column 'T1' at row 58060 服務器
查看致使報錯的語句: eclipse
insert into table1 values(null,value1,value2,value3,value4);
該語句中有個null 的value值,其目的其一是id是auto_increment列,其二我要短期內操做1萬左右張表,每張表之間是不一樣的,無法指定表的列名
報錯分析:
一、看到錯誤的那一刻我覺得是個人表裏id爲58060的T1列是空值,可是當去select該列的時候,該列的數據表中有數據
二、而後我想着把insert語句print出來,可是由於數據量的緣由,致使打印出來ecplise奔潰,果斷改成寫文本,可是寫下來的文本中沒辦法看到null的數據(好吧果斷將數據表中有空值的想法拋棄了);
三、而後我開始懷疑個人java程序(由於個人java程序是經過將A服務器上的數據拿過來通過字符串(bufferbulider方式處理)的拼接,拼接出本身的insert語句,以後插入到B服務器中的表)bufferbuilder的處理有問題,當我使用eclipse的debug方式處理的時候看到有的bufferbuilder中的值是空值,此時腦子中想的都是垃圾處理啊,總之就是覺得處理過程當中程序寫的有問題,鬧出來的空值;
四、可是當我就讓程序報錯,一直執行,出現的情況是有些個表的insert是OK的,而後我能夠可定的是個人程序沒問題;
五、這樣的結果就是我本身把本身繞住了,走進一個圈裏,出不來了,只得求助個人技術主管(主管就是主管,聽了個人問題分析,他就下手了,我以爲由於他是局外人,首先懷疑的是數據表中有空值,可是呢他丫沒直接說就是改了改個人代碼而後找到了數據表中的空值,顯得好牛逼啊)
六、其中有個重要的東西是個人數據data 取過來後 由於考慮數據量大的緣由因此手動分批次提交數據,而後一張表若是分爲4份來提交可能前邊倆份數據能夠正常提交,可是後邊遇到數據有問題的行時候報了錯,Incorrect integer value: 'null' for column 'T1' at row 58060
最終結果:ide
一、數據表中有空值;
二、這個跟網上說的 java.sql.SQLException: Incorrect integer value: '' for column 'id' at row 1 這樣的錯誤是沒半毛錢關係
三、主要緣由是我手動分批次提交了,致使對java.sql.SQLException: Incorrect integer value: 'null' for column 'T1' at row 58060 的理解出現誤差,簡單來講是這樣的,若是你的數據有80000條,分20000提交一次,40000提交一次,60000提交一次,80000提交一次,而後這個錯誤實際上說的是60000提交那次報的錯(在該次提交中58060 的條中T1是空值,而事實上就是這樣),惋惜我徹底忘記了我手動分批次提交對mysql驅動來講每次提交都是一個new commit ,好尷尬。ui