OceanBase 数据库专门为 Oracle 模式的浮点数提供了两种数值数据类型: BINARY_FLOAT 和BINARY_DOUBLE,本文简单介绍这两种类型的使用方式。
详细信息
BINARY_FLOAT 和 BINARY_DOUBLE 支持 NUMBER 数据类型提供的所有基本功能。但是,NUMBER 使用十进制精度,而 BINARY_FLOAT 和 BINARY_DOUBLE 使用二进制精度,这可以实现更快的算术计算并且通常会降低存储要求。
BINARY_FLOAT 和 BINARY_DOUBLE 是近似数值数据类型。它们存储十进制值的近似表示,而不是精确表示。例如,值 0.1 不能由 BINARY_DOUBLE 或 BINARY_FLOAT 精确表示。它们经常用于科学计算。它们的行为类似于 Java 中的数据类型 FLOAT 和 DOUBLE。
有效的浮点数子例如:1.2,-1.1,0. ......
数值数据类型除了提供数字浮点类型外,还提供了正负无穷和非数字 (not a number / NaN) 等特殊表示。
示例。
创建测试表 TEST。
CREATE TABLE TEST(C1 BINARY_FLOAT,C2 BINARY_DOUBLE); Query OK, 0 rows affected (0.077 sec)执行插入语句。
obclient> INSERT INTO TEST VALUES(BINARY_FLOAT_INFINITY,BINARY_DOUBLE_INFINITY);--- 插入正无穷 Query OK, 1 row affected (0.010 sec)obclient> INSERT INTO TEST VALUES(-BINARY_FLOAT_INFINITY,-BINARY_DOUBLE_INFINITY);--- 插入负无穷 Query OK, 1 row affected (0.002 sec)obclient> INSERT INTO TEST VALUES(BINARY_FLOAT_NAN,BINARY_DOUBLE_NAN);--- 插入非数字 Query OK, 1 row affected (0.003 sec)通过 JDBC 驱动连接 OceanBase 数据库,并在 Oracle 模式下测试浮点数数值数据类型,代码如下:
import java.sql.*; public class con { public static void main(String[] args) { // 数据库 URL,用户名和密码 String url = "jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/xxx"; String user = "xxx"; String password = "xxx"; // 用于插入数据的 SQL 语句 String sql = "INSERT INTO TEST (C1, C2) VALUES (?, ?)"; try { // 建立数据库连接 Connection conn = DriverManager.getConnection(url, user, password); // 创建 PreparedStatement PreparedStatement pstmt = conn.prepareStatement(sql); // 插入正无穷 pstmt.setString(1, "INF"); pstmt.setString(2, "INF"); pstmt.executeUpdate(); // 插入负无穷 pstmt.setString(1, "-INF"); pstmt.setString(2, "-INF"); pstmt.executeUpdate(); // 插入非数字 pstmt.setString(1, "NAN"); pstmt.setString(2, "NAN"); pstmt.executeUpdate(); // 关闭 PreparedStatement 和连接 pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
相关文档
关于 OceanBase 数据库支持的各类数值数据类型的详细介绍,参见 数值数据类型 。
适用版本
OceanBase 数据库 V3.x、V4.x版本,OceanBase 数据库 JDBC 所有版本。