做一個積極的人
編碼、改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、如果是長度設計合理,那在編寫代碼的時候,一定要對用戶輸入的內容做檢驗(前端+后台),永遠不要相信用戶的輸入內容!!!
謝謝你的閱讀,如果您覺得這篇博文對你有幫助,請點贊或者喜歡,讓更多的人看到!祝你每天開心愉快!
不管做什么,只要堅持下去就會看到不一樣!在路上,不卑不亢!
願你我在人生的路上能都變成最好的自己,能夠成為一個獨擋一面的人
© 每天都在變得更好的阿飛雲