oracle/mysql/lightdb/postgresql java jdbc类型映射

MySQL数据类型JAVA数据类型JDBC TYPE普通变量类型主键类型
BIGINT Long BIGINT 支持 支持
TINYINT Byte TINYINT 支持 不支持
SMALLINT Short SMALLINT 支持 不支持
MEDIUMINT Integer INTEGER 支持 支持
INTEGER Integer INTEGER 支持 支持
INT Integer INTEGER 支持 支持
FLOAT Float REAL 支持 不支持
DOUBLE Double DOUBLE 支持 不支持
DECIMAL BigDecimal DECIMAL 支持 不支持
NUMERIC BigDecimal DECIMAL 支持 不支持
CHAR String CHAR 支持 不支持
VARCHAR String VARCHAR 支持 不支持
TINYBLOB DataTypeWithBLOBs.byte[] BINARY 不支持 不支持
TINYTEXT String VARCHAR 支持 不支持
BLOB DataTypeWithBLOBs.byte[] BINARY 不支持 不支持
TEXT DataTypeWithBLOBs.String LONGVARCHAR 不支持 不支持
MEDIUMBLOB DataTypeWithBLOBs.byte[] LONGVARBINARY 不支持 不支持
MEDIUMTEXT DataTypeWithBLOBs.String LONGVARCHAR 不支持 不支持
LONGBLOB DataTypeWithBLOBs.byte[] LONGVARBINARY 不支持 不支持
LONGTEXT DataTypeWithBLOBs.String LONGVARCHAR 不支持 不支持
DATE Date DATE 支持 不支持
TIME Date TIME 支持 不支持
YEAR Date DATE 不支持 不支持
DATETIME Date TIMESTAMP 支持 不支持
TIMESTAMP Date TIMESTAMP 支持 不支持

  以下是商业数据库的。 

postgresql/lightdb  java.sql.Types 值 Java 类型 IBM DB2 Oracle Sybase SQL Informix
 int8 BIGINT java.lang.long BIGINT NUMBER (38, 0) BIGINT BIGINT INT8
  BINARY byte[] CHAR FOR BIT DATA RAW BINARY IMAGE BYTE
  BIT java.lang.Boolean N/A BIT BIT BIT BIT

bytea/blob

读写操作https://www.cybertec-postgresql.com/en/binary-data-performance-in-postgresql/

BLOB byte[] BLOB BLOB BLOB BLOB BLOB
 bpchar/char CHAR java.lang.String CHAR, GRAPHIC CHAR CHAR CHAR CHAR
/ CLOB java.lang.String CLOB, DBCLOB CLOB CLOB CLOB CLOB
 DATE DATE java.sql.Date DATE DATE DATE DATE DATE
 number/numeric DECIMAL java.math.BigDecimal DECIMAL NUMBER DECIMAL, MONEY, SMALLMONEY DECIMAL DECIMAL
FLOAT/DOUBLE  DOUBLE java.lang.Double DOUBLE DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION DOUBLE PRECISION
FLOAT8 FLOAT java.lang.Double FLOAT FLOAT FLOAT FLOAT FLOAT
 int4 INTEGER java.lang.Integer INTEGER INTEGER INT INTEGER INTEGER
  JAVA_OBJECT java.lang.Object JAVA_OBJECT JAVA_OBJECT JAVA_OBJECT JAVA_OBJECT OPAQUE
 bytea LONGVARBINARY byte[] LONG VARCHAR FOR BIT DATA LONG RAW IMAGE IMAGE BYTE
 TEXT LONGVARCHAR java.lang.String LONG VARCHAR, LONG VARGRAPHIC LONG TEXT TEXT TEXT
number/numeric NUMERIC java.math.BigDecimal NUMERIC NUMBER NUMERIC NUMERIC NUMERIC
  OTHER java.lang.Object OTHER OTHER OTHER OTHER OTHER
real/float4  REAL java.lang.Float REAL REAL REAL REAL REAL
 int2 SMALLINT java.lang.Integer SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT
 time TIME java.sql.Time TIME

无对应,pg time无日期部分,且不支持0日期,所以无法计算合理值。

TIME TIME DATETIME HOUR TO SECOND
 timestamp/datetime(sysdate) TIMESTAMP java.sql.Timestamp TIMESTAMP timestamp DATETIME, SMALLDATETIME DATETIME DATETIME YEAR TO FRACTION (5)

timestamptz

pg的时区格式为+10

2022-07-05 21:08:53.598693+08

     

timestamp with time zone

需要注意的是,oracle的时区格式为+10:00

     
  TINYINT java.lang.Bute SMALLINT

TINYINT

TINYINT

TINYINT TINYINT
bytea/blob  VARBINARY byte[] VARCHAR FOR BIT DATA RAW VARBINARY IMAGE BYTE
clob/varchar/varchar2/text VARCHAR java.lang.String VARCHAR, VARGRAPHIC VARCHAR VARCHAR VARCHAR VARCHAR
 
  Oracle ResultSetMetaData getPrecision/getScale有一个bug,count(*) as xxx、abs(col) as xxx,这样xxx是无法返回正确的Scale和Precision的,要想这些情况下返回正确的值,需要使用明确的cast(xxx as datatype)。参见https://stackoverflow.com/questions/1410267/oracle-resultsetmetadata-getprecision-getscale
posted @ 2019-09-13 19:16  zhjh256  阅读(1057)  评论(0编辑  收藏  举报