广州做服装电商拿货的网站,北京市建设工程信息网交易网,app定制研发app开发,中国十大erp公司jdbc和jdbc驱动有趣的是#xff0c;布尔类型只是在SQL标准后期才引入#xff0c;即SQL#xff1a;1999 。 即使在今天#xff0c;并非所有数据库本身都支持BOOLEAN或BIT类型。 最重要的是#xff0c;我们仍然可以在Oracle中等待一段时间。 这是2002年以来关于该主题的“问… jdbc和jdbc驱动 有趣的是布尔类型只是在SQL标准后期才引入即SQL1999 。 即使在今天并非所有数据库本身都支持BOOLEAN或BIT类型。 最重要的是我们仍然可以在Oracle中等待一段时间。 这是2002年以来关于该主题的“问汤姆”的观点 https : //asktom.oracle.com/pls/apex/f?p100 :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 spaces.
iii) Otherwise, an exception condition is raised: data exception — invalid charactervalue for cast. 因此即使从历史的角度来看应该接受1/0的行为但大多数开放源代码数据库都显示了可以被解释为“正确”的行为。 使用开放源代码测试数据库时请注意此限制 有关此数据库和H2数据库的更多信息请参考H2用户组上的该线程 。 参考来自JAVASQL和JOOQ博客的JCG合作伙伴 Lukas Eder 的JDBC布尔兼容性列表 。 翻译自: https://www.javacodegeeks.com/2014/03/the-jdbc-boolean-compatibility-list.htmljdbc和jdbc驱动