SQLException: #22001你知道這個錯誤碼嗎


做一個積極的人

編碼、改bug、提升自己

我有一個樂園,面向編程,春暖花開!

java.sql.SQLException: #22001

java.sql.SQLException: #22001
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2838)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2334)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:22

報錯,沒見過,一天兩個sql爆出了這個錯誤! 然后發現直接去搜 java.sql.SQLException: #22001 竟然沒有 能匹配的帖子。自己整理一篇,方便后續回顧,也希望幫助到需要的伙伴!

結論

-- 表字段長度 `desc` varchar(255) DEFAULT NULL COMMENT '描述' 
--長度884 職場上沒有誰是永遠靠得住的,正如西方名言“沒有永遠的朋友,也沒有永遠的敵人,只有永遠的利益”。我們要想讓別人靠得住,首先是自己站得住。如果自己站不住,別人一定靠不住。你自己不懂得如何保護自己,別人也不好多管閑事,自然幫不了你。 在職場什么最重要,讓你成為一個璀璨的星星,答案就是:核心競爭力。如果說你技術好,比你技術好的多的是,如果說你經驗豐富,比你豐富的人多的去。所以我們的核心競爭力是什么呢?記得我的上司給我說過這樣一句話:”如果你的理念獨一無二和略勝一籌的話,再加上稍稍的技術那就是你在別人面前可以競爭的資本“。我們的亮點也就在這。學會一種理念,超越別人思維的理念,你就是耀眼的金子。 

某些字段長度大於表字段的長度,導致執行sql的時候,報錯

我遇到的問題是因為是老的項目,前端對輸入的內容沒有做任何校驗,后台也沒有相應的校驗,導致不符合業務格式的數據能夠通過代碼層層邏輯,最終撞到數據庫的南牆,頭破了,"爆出"錯誤!

細心的伙伴可能已經看出,上面這個字段desc是mysql的一個關鍵字。建議不要使用!

阿里巴巴明確代碼規范手冊,Mysql數據庫 >> 建表規約:

4、【強制】禁用保留字,如 desc 、 range 、 match 、 delayed 等,請參考 MySQL 官方保留字

問題排查

1、首先通過報錯信息找到具體出現錯誤的代碼行,我這里出現錯誤是因為有一行更新數據 的sql 報出的錯。

2、知道具體的行數后,通過debug或者打印(查看)日志的方式打印出需要更新的數據。

3、通過打印的數據和數據庫字段值進行比對。看一下是哪個字段出現的問題。

解決

根據實際業務進行修改,如果實際業務的確需要保存那么長的數據,則修改字段長度。 否則對數據進行檢驗,不允許用戶填寫這么長的內容。

自己的一點小思考

1、如果發現這個問題,看一下是不是之前設計表的時候,字段長度沒有考慮好,長度不符合實際業務需求。

2、如果是長度設計合理,那在編寫代碼的時候,一定要對用戶輸入的內容做檢驗(前端+后台),永遠不要相信用戶的輸入內容!!!

 

 


謝謝你的閱讀,如果您覺得這篇博文對你有幫助,請點贊或者喜歡,讓更多的人看到!祝你每天開心愉快!


 

不管做什么,只要堅持下去就會看到不一樣!在路上,不卑不亢!

 

願你我在人生的路上能都變成最好的自己,能夠成為一個獨擋一面的人

© 每天都在變得更好的阿飛雲


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM