深夜,同學發來求助訊息,經過了解得知:同學在使用JDBC連接Oracle資料庫時,使用SQL陳述句死值可以正常獲取到資料,但是一但把條件值都換成?,然后通過Preparement實體的setString方法注入SQL陳述句時,就出現查詢不到任何內容的情況,
在經過了大約3個小時的折騰之后,發現同學在Oracle資料庫中的相關表的各欄位型別都是char型別,而我們一般都是用varchar型別,
【char型別和varchar型別的區別】:char型別是定長,字符不夠空格來湊,最長可存2000個字符,
varchar型別是變長,輸入多少就是多少,最長可存4000個字符,
經過嘗試,確定了Preparement實體的setString方法無法獲取到Oracle資料庫中相關表中的char型別欄位,即使直接在表中有資料的情況下把相關欄位的char型別修改為varchar型別,也不好使,推測是Oracle資料庫內部存在的某種格式轉換機制的兼容性問題吧,沒有深究,
重新建表,把相關欄位設定成varchar型別,測驗好用!
所以,在學習java呼叫資料庫時,建議Oracle資料庫中的表格字符型欄位的型別都設定成varchar型別,不然在以后再使用相關資料庫框架時很可能也會報錯,因為底層大部分還是JDBC代碼,不要給自己找麻煩,哈哈哈哈……
另外,在拜訪過度娘之后,發現如果資料庫表中的欄位設定成了char型別,也不是沒有操作的可能性,以下是檢索到的相關方法(個人沒有嘗試,請先測驗):
注意:以下代碼中的“4”需要根據Oracle資料庫表中的相關欄位型別的字符長度值來設定,(就是在創建表時設定欄位型別的字符長度)
conn.prepareStatement("select * from x where c = cast(?as char(4))")
【防偽標簽:ZWP】
總結:1、把表相關欄位型別由char型別改為varchar型別,
2、JDBC的方法改為conn.prepareStatement("select * from x where c = cast(?as char(4))"),
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/255047.html
標籤:Java
上一篇:Java基礎之:泛型
