Oracle vs PostgreSQL Develop(18) - Boolean
发表于:2024-10-27 作者:千家信息网编辑
千家信息网最后更新 2024年10月27日,在Oracle和PG中都可以使用int类型模拟布尔类型,但通过JDBC接口(JDBC驱动,Oracle为11.2.0.4,PG为9.3)获取出来的值却不一致,这一点需要注意。测试脚本drop tabl
千家信息网最后更新 2024年10月27日Oracle vs PostgreSQL Develop(18) - Boolean
在Oracle和PG中都可以使用int类型模拟布尔类型,但通过JDBC接口(JDBC驱动,Oracle为11.2.0.4,PG为9.3)获取出来的值却不一致,这一点需要注意。
测试脚本
drop table tbl1;create table tbl1(id int,c1 int);insert into tbl1 values(1,1);insert into tbl1 values(2,-1);insert into tbl1 values(3,2);insert into tbl1 values(4,0);
Java代码
/* * */package testPG;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class TestBoolean { public static void main(String[] args) { System.out.println("---------- PG -----------"); try (Connection conn = DriverManager.getConnection("jdbc:postgresql://192.168.26.28:5432/testdb", "pg12", "pg12")) { TestBool(conn); } catch (SQLException se) { System.out.println(se.getMessage()); } catch (Exception e) { e.printStackTrace(); } finally { } // end try System.out.println("---------- Oracle -----------"); try (Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.18:1521:orcl", "test", "test")) { TestBool(conn); } catch (SQLException se) { System.out.println(se.getMessage()); } catch (Exception e) { e.printStackTrace(); } finally { } // end try } public static void TestBool(Connection conn) { try (PreparedStatement pstmt = conn.prepareStatement("SELECT id,c1 from tbl1"); ResultSet rs = pstmt.executeQuery();) { conn.setAutoCommit(true); while (rs.next()) { int id = rs.getInt("id"); int c1 = rs.getInt("c1"); boolean b1 = rs.getBoolean("c1"); System.out.println("id:" + id + ",c1:" + c1 + ",b1:" + b1); } } catch (SQLException se) { System.out.println(se.getMessage()); } catch (Exception e) { e.printStackTrace(); } finally { } // end try } // end} // end Class
执行结果
---------- PG -----------id:1,c1:1,b1:trueid:2,c1:-1,b1:falseid:3,c1:2,b1:falseid:4,c1:0,b1:false---------- Oracle -----------id:1,c1:1,b1:trueid:2,c1:-1,b1:trueid:3,c1:2,b1:trueid:4,c1:0,b1:false
使用JDBC,在PG中,只有1视为T,其他为F;而在Oracle中,只有0视为F,其他视为T。
但在PG中,如把int转换为boolean,则行为与Oracle一致。
[local]:5432 pg12@testdb=# create table tbl2(id int,c1 int);CREATE TABLETime: 13.911 ms[local]:5432 pg12@testdb=# insert into tbl2 values(1,1);INSERT 0 1Time: 5.091 ms[local]:5432 pg12@testdb=# insert into tbl2 values(2,-1);INSERT 0 1Time: 2.653 ms[local]:5432 pg12@testdb=# insert into tbl2 values(3,2);INSERT 0 1Time: 2.716 ms[local]:5432 pg12@testdb=# insert into tbl2 values(4,0);INSERT 0 1Time: 2.625 ms[local]:5432 pg12@testdb=# [local]:5432 pg12@testdb=# select id,c1 from tbl2; id | c1 ----+---- 1 | 1 2 | -1 3 | 2 4 | 0(4 rows)Time: 3.183 ms[local]:5432 pg12@testdb=# alter table tbl2 alter column c1 type boolean using c1::boolean;ALTER TABLETime: 30.581 ms[local]:5432 pg12@testdb=# select id,c1 from tbl2; id | c1 ----+---- 1 | t 2 | t 3 | t 4 | f(4 rows)Time: 2.566 ms[local]:5432 pg12@testdb=#
一致
只有
类型
代码
布尔
接口
结果
脚本
行为
测试
驱动
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
常州助力智慧消防软件开发
上海橘树互联网科技有限公司
网络安全100字介绍
服务器管理器开机不显示
南阳市区信网络技术有限公司
数据库原理课后题答案doc下载
网络安全top10
服务器搭建网站哪个安全
XLN数据库
阿里云服务器预装windows
关系数据库的操作有哪些
吉好网络技术有限公司
中兴服务器bmc口是哪个
服务器无法定位
韩国网络安全能力怎么样
广州雨露网络技术
陕西应用软件开发费用
小米软件开发面试
软件开发逆向破解论坛
安卓数据库实现学生管理系统
好用的实时数据库
湖北人工智能软件开发多少钱
域名和服务器进不去网站怎么办
sql数据库一般位置
更改mysql数据库引擎
warframe开局服务器
上位机软件开发定价
字母设计软件开发
青年人网络安全知识
青岛番茄助教软件开发