JDBC布尔兼容性列表

有趣的是,布尔类型只是在SQL标准后期才引入,即SQL:1999 。 即使在今天,并非所有数据库本身都支持BOOLEANBIT类型。 最重要的是,我们仍然可以在Oracle中等待一段时间。 这是2002年以来关于该主题的“问汤姆”的观点: https : //asktom.oracle.com/pls/apex/f?p=100 :11:0 ::::: P11_QUESTION_ID: 6263249199595

fC69nJF

甲骨文 为什么没有布尔值?

人们通过使用数字或字符串文字来解决此限制。 例如1 / 0Y / NT / F或SQL标准'true' / 'false'

JDBC中的布尔值

从JDBC API的角度来看,可以通过PreparedStatement.setBoolean()将布尔值设置为绑定值,也可以通过ResultSet.getBoolean()和类似方法从结果集中ResultSet.getBoolean()布尔值。 如果您的数据库支持布尔值,则Java boolean类型可以很好地映射到SQL BOOLEAN ,即使Java的Boolean包装器类型更适合尊重NULLs

但是,如果要将布尔值存储在INTEGERCHAR(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驱动程序都支持上述功能。 这些数据库将运行上述程序:

  • 火鸟(插入“ 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用户组上的该线程 。

参考:来自JAVA,SQL和JOOQ博客的JCG合作伙伴 Lukas Eder 的JDBC布尔兼容性列表 。

翻译自: https://www.javacodegeeks.com/2014/03/the-jdbc-boolean-compatibility-list.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux用户操作的日志,linux 用户操作记录并录入日志

1. 添加bash全局配置文件&#xff1a;cd /etc/profile.dvi log_command.sh输入如下内容&#xff1a;export PROMPT_COMMAND‘RETRN_VAL$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\[ ]*//" ) [$RETRN_VAL]"‘2. 添加rsy…

我实在不懂Python的Asyncio

原语 事件循环(Event Loop)Awaitables和CoroutinesCoroutine WrappersAwaitables and FuturesTasksHandlesExecutorsTransport and Protocols如何使用Asyncio上下文数据个人想法这是Flask&#xff0c;Sentry的作者Armin Ronacher的一篇博客&#xff0c;这篇文章的影响很大&…

GDI+与WPF中的颜色简析

GDI与WPF中的颜色简析 原文:GDI与WPF中的颜色简析--------------------------------------------------------------------------------引用或转载时请保留以下信息&#xff1a;大可山 [MSN:a3news(AT)hotmail.com] http://www.zpxp.com http://www.brawdraw.com萝卜鼠在线图形…

pythondatetime_Date

在JavaScript中&#xff0c;Date对象用来表示日期和时间。要获取系统当前时间&#xff0c;用&#xff1a;var now new Date();now; // Wed Jun 24 2015 19:49:22 GMT0800 (CST)now.getFullYear(); // 2015, 年份now.getMonth(); // 5, 月份&#xff0c;注意月份范围是0~11&…

Panorama Viewer – jQuery 360度全景展示插件

jQuery Panorama Viewer 这款插件可以帮助你在网站中嵌入全景图片。要做到这一点&#xff0c;首先只需要在页面中引入最新的 jQuery 库&#xff0c;以及 jquery.panorama_viewer.js 和 panorama_viewer.css 到页面中&#xff0c;然后给图片添加 CSS 类“panorama”。现代浏览器…

优化您的ApplicationContext

Spring有一个问题&#xff0c;已经存在了一段时间&#xff0c;我在许多项目中都遇到过。 与Spring或Spring的Guys无关&#xff0c;这取决于像您和我这样的Spring用户。 让我解释一下……在Spring 2的过去&#xff0c;您必须手动配置Application Context&#xff0c;手动创建一个…

linux多线程编程(中嵌教育-嵌入式linux开发课件),linux多线程编程(中嵌教育-嵌入式linux开发课件).ppt...

linux多线程编程(中嵌教育-嵌入式linux开发课件).pptlinux多线程编程 Linux下线程概述 linux线程实现 1、Linux下线程概述 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。 线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道…

oracle group by 多类别_python数据关系型图表散点图系列多数据系列

多数据系列多数据系列的散点图需要使用不同的填充颜色(fill)和数据点形状(shape)这两个视觉特征来表示数据系列&#xff1b;绘制多数据系列散点图多数据系列散点图就是在单数据系列上添加新的数据系列&#xff1b;使用不同的填充颜色或形状区分数据系列&#xff1b;plotnine绘制…

图片和视频压缩例子

/*** 视频压缩 需要jave jar 包。到网上下载即可 * * param source 需要压缩的视频* param targetPath 压缩的目标路径* return*/public static boolean compressVideo(File source, String targetPath) {System.out.println("source:" source);System.out.println…

Web 开发中应用 HTML5 技术的10个实例教程

HTML5 作为下一代网站开发技术&#xff0c;无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者&#xff0c;都值得去研究。借助尖端功能&#xff0c;技术和 API&#xff0c;HTML5 允许你创建响应性、创新性、互动性以及令人惊叹的漂亮网站。更进一步&#xff0c;你也可以…

linux ptrace 内核源码分析,linux 3.5.4 ptrace源码分析分析(系列一)

ptrace是linux系统中为了调试专门设立的一种系统调用。要想调试调试一个进程&#xff0c;有两种方式&#xff1a;PTRACE_TRACEME和PTRACE_ATTACH。这两种方式的主要区别可以概括为&#xff1a;PTRACE_TRACEME是子进程主动申请被TRACE。而PTRACE_ATTACH是父进程自己要attach到子…

在单元测试中访问私有字段

首先&#xff0c;让我大声说一下&#xff0c;您需要将代码设计为可测试的&#xff0c;以便通过公共方法测试私有字段。 但是&#xff0c;&#xff08;“ buts”是人们仍在编程而不是计算机本身的原因&#xff0c;所以在这里很高兴&#xff09;有时您想要并且应该更改一些私有字…

【LeetCode题解】160_相交链表

目录 160_相交链表描述解法一&#xff1a;哈希表思路Java 实现Python 实现解法二&#xff1a;双指针&#xff08;推荐&#xff09;思路Java 实现Python 实现160_相交链表 描述 编写一个程序&#xff0c;找到两个单链表相交的起始节点。 例如&#xff0c;下面的两个链表&#xf…

maya崩溃自动保存路径_maya 使用swig将插件编译成pyd,无缝使用内置数据实现加速计算模块...

前言&#xff1a;原本目的是想寻求一种方式来对cpu计算密集型代码部分进行加速替代&#xff0c;但是maya中mll插件的插件套路在传递参数上会占用大量的io&#xff0c;对于数据比较大的部分也会有相当消耗。如果全部写在c部分又感觉缺乏灵活性&#xff0c;所以琢磨的一种可以在p…

VS2010中预处理器定义

vs2010下的预处理器定义就是使该预定义下的宏定义在每个文件中都包括&#xff0c;便于跨平台编码格式或者其他的一些设置&#xff0c;便于处理&#xff0c;值得注意的是工程移植的时候需要考虑预处理定义否则代码运行的环境可能不同&#xff0c;导致结果出错。 详解&#xff1a…

Slip.js – 在触摸屏上实现 Swipe 对列表重新排序

Slip.js 是一个很小的 JavaScript 库&#xff0c;用于实现对触摸屏的互动 Swipe 和对元素重新排序列表&#xff08;Reordering&#xff09;。Slip.js 没有任何的依赖&#xff0c;你可以通过自定义 DOM 事件实现重新排序交互。 您可能感兴趣的相关文章Pace.js – 页面加载进度自…

suse10 linux安装,SuSE10.2 安装手记

SuSE10.2 安装手记发布时间:2007-04-05 00:31:51来源:红联作者:Reference1. 添加安装源SuSE提供了多种安装源的管理&#xff0c;你可以通过Yast方便的添加和删除各种安装源。(1) 本地安装源&#xff1a;YaST -> Software -> Installation Source -> Add -> Local D…

构建和运行Java 8支持

尚未提供对Java 8的Eclipse支持。 如果要使用它&#xff0c;则必须构建它。 Eclipsepedia的JDT Core / Java8页面包含有关使用Eclipse Java开发工具 &#xff08;JDT&#xff09;中不断发展的Java 8支持源来设置开发环境的说明。 说明中缺少一些内容&#xff1b; 待会儿我会回圈…

django异常日志_【python小随笔】Django+错误日志(配置Django报错文件指定位置)...

1: 自定义日志文件.py----------几个文件需要创建日志&#xff0c;就需要重新定义几份#1定义一个日志文件 创建一个操作日志对象loggerfile_1 logging.FileHandler(text_1.log, a, encodingutf-8) # text_1.log 定义日志文件名fmt logging.Formatter(fmt"%(asctime)s - %…

Django之管理权限

什么是权限&#xff1a; 谁对什么资源能做什么操作。 管理权限的实现有很多&#xff0c;这里实现一个最简单的管理权限的实现方式&#xff1a;rbac &#xff08; role based access control &#xff09; 实现的一个基本思路&#xff1a; 一张user用户表&#xff0c;一张role…