mysql数据库int字段String条件查询
?
今天測試碰到個有趣的問題
很簡單一個請求
http://127.0.0.1:8080/driverinfomanagecs/selectDriverCarInfolistByPartyId?partyid=565613848
contrller里面也很簡單 就是一個mybatis的級聯(lián)查詢,查出的數(shù)據(jù)json返回
@RequestMapping("/selectDriverCarInfolistByPartyId")public ResponseVO<List<CarDriverInfo>> selectDriverCarInfolistByPartyId(String partyid) {if (StringUtils.isBlank(partyid)) {return ResponseVO.error("partyid不能為空");}Pattern pattern = Pattern.compile(PatternUtil.NUMBER);if(!pattern.matcher(partyid).matches()) {return ResponseVO.error("partyid格式不正確");}Integer partyId = Integer.parseInt(partyid);int count = driverInfoManageService.selectDriverCarInfoCountByPartyId(partyId);if(count < 1) {return ResponseVO.error("沒有查到該車隊(duì)信息");}List<CarDriverInfo> info = driverInfoManageService.selectDriverCarInfolistByPartyId(partyId);if (info == null) {return ResponseVO.error("沒有查到該車隊(duì)信息");} else {return ResponseVO.successWithData("查詢成功", info, count);}}?
用Postman測試了一下好的,然后我再參數(shù)partyid后面又加了個1 變成?partyid=5656138481
再去測試發(fā)現(xiàn)報錯了?
報了個
Exception in thread "main" java.lang.NumberFormatException: For input string: "5656138481"一看是數(shù)字啊 應(yīng)該對的 再一次 好像超出int的范圍了 然后觀察數(shù)據(jù)庫 發(fā)現(xiàn)
`partyId` int(19) NOT NULLint(19) 的話 我用Long接收就好了?
?
把controller改成
@RequestMapping("/selectDriverCarInfolistByPartyId")public ResponseVO<List<CarDriverInfo>> selectDriverCarInfolistByPartyId(String partyid) {if (StringUtils.isBlank(partyid)) {return ResponseVO.error("partyid不能為空");}Pattern pattern = Pattern.compile(PatternUtil.NUMBER);if(!pattern.matcher(partyid).matches()) {return ResponseVO.error("partyid格式不正確");}Long partyId = Long.parseLong(partyid);int count = driverInfoManageService.selectDriverCarInfoCountByPartyId(partyId);if(count < 1) {return ResponseVO.error("沒有查到該車隊(duì)信息");}List<CarDriverInfo> info = driverInfoManageService.selectDriverCarInfolistByPartyId(partyId);if (info == null) {return ResponseVO.error("沒有查到該車隊(duì)信息");} else {return ResponseVO.successWithData("查詢成功", info, count);}}ok 正常 參數(shù)加長也不報錯了
?
后來一想 為什么不直接改成用String接收呢
就把controller改成
@RequestMapping("/selectDriverCarInfolistByPartyId")public ResponseVO<List<CarDriverInfo>> selectDriverCarInfolistByPartyId(String partyid) {if (StringUtils.isBlank(partyid)) {return ResponseVO.error("partyid不能為空");}int count = driverInfoManageService.selectDriverCarInfoCountByPartyId(partyid);if(count < 1) {return ResponseVO.error("沒有查到該車隊(duì)信息");}List<CarDriverInfo> info = driverInfoManageService.selectDriverCarInfolistByPartyId(partyid);if (info == null) {return ResponseVO.error("沒有查到該車隊(duì)信息");} else {return ResponseVO.successWithData("查詢成功", info, count);}}?
然后有趣的事情就發(fā)生了
?我把參數(shù)改成?partyid=565613848aaaaa 一樣能正常查到565613848的數(shù)據(jù) 改成?partyid=aaaaa565613848?就只能查到partyid=0的數(shù)據(jù) 一想 不會是mysql把我進(jìn)行了什么運(yùn)算吧
直接在數(shù)據(jù)庫試了試
結(jié)果如下
字母在后:
字母在前:
?
?
個人理解 mysql會從左到右開始讀取 一旦遇到非數(shù)字則視作后面的所有字符值為0 無論后面是否有數(shù)字
(565613848+0【aaabbb】)=565613848
(0【aaabbb565613848】)=0
保存一下 以防不測……
總結(jié)
以上是生活随笔為你收集整理的mysql数据库int字段String条件查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软考】 2 网络安全
- 下一篇: Mysql我国省市区字典数据