jdbc和jdbc驱动_JDBC布尔兼容性列表
jdbc和jdbc驅動
有趣的是,布爾類型只是在SQL標準后期才引入,即SQL:1999 。 即使在今天,并非所有數據庫本身都支持BOOLEAN或BIT類型。 最重要的是,我們仍然可以在Oracle中等待一段時間。 這是2002年以來關于該主題的“問湯姆”的觀點: https : //asktom.oracle.com/pls/apex/f?p=100 :11:0 ::::: P11_QUESTION_ID: 6263249199595
Oracle 為什么沒有布爾值?
人們通過使用數字或字符串文字來解決此限制。 例如1 / 0 , Y / N , T / F或SQL標準'true' / 'false' 。
JDBC中的布爾值
從JDBC API的角度來看,可以通過PreparedStatement.setBoolean()將布爾值設置為綁定值,也可以通過ResultSet.getBoolean()和類似方法從結果集中ResultSet.getBoolean()布爾值。 如果您的數據庫支持布爾值,則Java boolean類型可以很好地映射到SQL BOOLEAN ,即使Java的Boolean包裝器類型更適合尊重NULLs 。
但是,如果要將布爾值存儲在INTEGER , CHAR(1)或VARCHAR(1)列中,則在各種數據庫中情況看起來會有所不同。 考慮以下示例:
CREATE TABLE booleans (val char(1) );然后,運行此Java程序(我們使用jOOQ保持簡潔)
try {DSL.using(configuration).execute("insert into boolean (val) values (?)", true); } catch (Exception e) {e.printStackTrace(); }DSL.using(configuration).fetch("select * from booleans");并非所有的數據庫/ JDBC驅動程序都支持上述功能。 這些數據庫將運行上述程序:
- Firebird(插入“ Y”或“ N”)
- HSQLDB(插入“ 1”或“ 0”)
- IBM DB2(插入“ 1”或“ 0”)
- MariaDB(插入“ 1”或“ 0”)
- Microsoft Access(插入“ 1”或“ 0”)
- MySQL(插入'1'或'0')
- Oracle(插入“ 1”或“ 0”)
- SQL Server(插入“ 1”或“ 0”)
- Sybase(插入'1'或'0')
……而這些數據庫將拋出異常:
- BR
- 德比
- H2
- 英格利斯
- PostgreSQL
- SQLite的
SQL標準中的布爾值
值得一提的是,SQL標準在CAST()函數的規范中指定了如何處理從boolean到字符串的轉換:
6.13 <cast specification> [...] 10) If TD is fixed-length character string, then let LTD be the length in charactersof TD. [...] e) If SD is boolean, then Case: i) If SV is True and LTD is not less than 4, then TV is 'TRUE' extended on the right byLTD–4 s. ii) If SV is False and LTD is not less than 5,then TV is 'FALSE' extended on the right byLTD–5 <space>s. iii) Otherwise, an exception condition is raised: data exception — invalid charactervalue for cast.因此,即使從歷史的角度來看,應該接受1/0的行為,但大多數開放源代碼數據庫都顯示了可以被解釋為“正確”的行為。 使用開放源代碼測試數據庫時,請注意此限制!
有關此數據庫和H2數據庫的更多信息,請參考H2用戶組上的該線程 。
翻譯自: https://www.javacodegeeks.com/2014/03/the-jdbc-boolean-compatibility-list.html
jdbc和jdbc驅動
總結
以上是生活随笔為你收集整理的jdbc和jdbc驱动_JDBC布尔兼容性列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 健身房备案(健身卡备案)
- 下一篇: linux修改主机名的命令(linux