Java 애플리케이션에서 데이터베이스 데이터 유형에 맵핑되는 데이터 유형

효율 JDBC 을 작성하려면 Java™ 데이터 유형과 테이블 컬럼 데이터 유형 간의 최상의 맵핑을 사용해야 합니다.

다음 표에서는 Linux®, UNIX및 Windows 시스템의 경우 Db2®, Db2 for z/OS®또는 IBM® Informix® 시스템의 JDBC 및 데이터베이스 데이터 유형에 대한 Java 데이터 유형의 맵핑을 요약합니다.

테이블 컬럼 갱신을 위한 데이터 유형

다음 표에는 JDBC 프로그램및 SQLJ 프로그램의 입력 호스트 표현식에 대한PreparedStatement.setXXX 또는 ResultSet.updateXXX 메소드에 대한 데이터베이스 데이터 유형에 대한 Java 데이터 유형의 맵핑이 요약되어 있습니다. Java 데이터 유형이 두 개 이상 나열되어 있는 경우, 첫 번째 데이터 유형이 권장 데이터 유형입니다.

표 1. 데이터베이스 테이블 갱신을 위한 데이터 서버 데이터 유형에 대한 자바 데이터 유형의 맵핑
Java 데이터 유형 데이터베이스 데이터 유형
short, java.lang.Short SMALLINT
부울1, 바이트1, java.lang.Boolean, java.lang.Byte SMALLINT
int, java.lang.Integer INTEGER
long, java.lang.Long BIGINT13
java.math.BigInteger BIGINT12
java.math.BigInteger CHAR (n)12,5
float, java.lang.Float REAL
double, java.lang.Double 이중
java.math.BigDecimal DECIMAL (p,s)2
java.math.BigDecimal DECFLOAT (n)3,4
java.lang.String CHAR (n)5
java.lang.String GRAPHIC (m)6
java.lang.String VARCHAR (n)7
java.lang.String VARGRAPHIC (m)8
java.lang.String CLOB9
java.lang.String XML11
byte[] CHAR (n) FOR BIT DATA5
byte[] VARCHAR (n) FOR BIT DATA7
byte[] BINARY (n)5, 14
byte[] VARBINARY (n)7, 14
byte[] BLOB9
byte[] ROWID
byte[] XML11
java.sql.Blob BLOB
java.sql.Blob XML11
java.sql.Clob CLOB
java.sql.Clob DBCLOB10
java.sql.NClob DBCLOB10
java.sql.Clob XML11
java.sql.Date DATE
java.sql.Time 시간
java.sql.Timestamp TIMESTAMP, TIMESTAMP (p), TIMESTAMP WITH TIME ZONE, TIMESTAMP (p) WITH TIME ZONE15,16
java.io.ByteArrayInputStream BLOB
java.io.StringReader CLOB
java.io.ByteArrayInputStream CLOB
java.io.InputStream XML11
com.ibm.db2.jcc.DB2RowID(더 이상 사용되지 않음) ROWID
java.sql.RowId ROWID
com.ibm.db2.jcc.DB2Xml(더 이상 사용되지 않음) XML11
java.sql.SQLXML XML11
java.util.Date CHAR (n)12,5
java.util.Date VARCHAR (n)12,5
java.util.Date 날짜12
java.util.Date 시간12
java.util.Date TIMESTAMP, TIMESTAMP (p), TIMESTAMP WITH TIME ZONE, TIMESTAMP (p) 과 TIME ZONE12,15,16
java.util.Calendar CHAR (n)12,5
java.util.Calendar VARCHAR (n)12,5
java.util.Calendar 날짜12
java.util.Calendar 시간12
java.util.Calendar TIMESTAMP, TIMESTAMP (p), TIMESTAMP WITH TIME ZONE, TIMESTAMP (p) 과 TIME ZONE12,15,16
주:
  1. 컬럼 갱신의 경우, 데이터 서버는 자바 부울 또는 바이트 데이터 유형과 정확히 동등하지 않지만 가장 적합한 것은 SMALLINT입니다.
  2. p는 10진수의 정밀도이고 s는 테이블 컬럼의 스케일입니다.

    java.math.BigDecimal 컬럼이 DECIMAL 컬럼에 맵핑되도록 재무 애플리케이션을 설계해야 합니다. DECIMAL 컬럼의 정밀도 및 스케일을 알고 있는 경우 DECIMAL 컬럼의 데이터를 java.math.BigDecimal 변수의 데이터로 갱신하면 다른 데이터 유형 조합을 사용하는 것보다 더 좋은 성능을 얻을 수 있습니다.

  3. n=16 또는 n=34.
  4. DECFLOAT는 Db2 for z/OS, Linux, UNIX및 Windows 시스템의 경우 Db2또는 IBM i 의 경우 Db2 데이터 서버에 대한 연결에 유효합니다. DECFLOAT를 사용하려면 SDK for Java Version 5 (1.5) 이상이 필요하다.
  5. n<=254.
  6. m<=127.
  7. n<=32672.
  8. m<=16336.
  9. 이 맵핑은 데이터 서버가 컬럼의 데이터 유형을 판별할 수 있는 경우에만 유효합니다.
  10. 특성 useJDBC4DataType이 DB2BaseDataSource.NO로 설정된 경우 java.sql.Clob을 사용하십시오. 특성 useJDBC4DataType이 설정되거나 DB2BaseDataSource.YES로 설정된 경우 java.sql.NClob를 사용하십시오.
  11. XML은 Db2 for z/OS 또는 Linux, UNIX및 Windows 시스템의 경우 Db2 데이터 서버에 대한 연결에 유효합니다.
  12. 이 맵핑은 IBM Data Server Driver for JDBC and SQLJ 버전 4.13이상에만 유효합니다.
  13. BIGINT는 Db2 for z/OS 데이터 서버, Linux, UNIX및 Windows 시스템의 경우 Db2 데이터 서버 및 IBM i 의 경우 Db2 데이터 서버에 대한 연결에 유효합니다.
  14. BINARY and VARBINARY are valid for connections to Db2 for z/OS data servers, IBM i 의 경우 Db2 5/OS V5R3 or later data servers, or Linux, UNIX및 Windows 시스템의 경우 Db2 data servers.
  15. p는 시간소인 정밀도를 표시하며 이는 시간소인의 소수 부분 자릿수입니다. 0<=p<=12. 기본값은 6입니다. TIMESTAMP (p) 는 Linux, UNIX및 Windows 시스템의 경우 Db2Db2 for z/OS에 대한 연결에 지원됩니다.
  16. WITH TIME ZONE절은 Db2 for z/OS 에 대한 연결에만 지원됩니다.

테이블 컬럼에서 검색하려는 데이터 유형

다음 표에는 JDBC 프로그램의 ResultSet.getXXX 메소드에 대한 Java 데이터 유형에 대한 Db2 또는 IBM Informix 데이터 유형과 SQLJ 프로그램의 반복자에 대한 맵핑이 요약되어 있습니다. 이 테이블에서는 ResultSet.getObject를 사용하여 검색되는 Java 숫자 랩퍼 오브젝트 유형을 나열하지 않습니다.

테이블 2. 데이터 서버 테이블에서 데이터를 검색하기 위한 자바 데이터 유형에 대한 데이터 서버 데이터 유형의 맵핑
SQL 데이터 유형 권장 Java 데이터 유형 또는 Java 오브젝트 유형 기타 지원되는 Java 데이터 유형
SMALLINT short byte, int, long, float, double, java.math.BigDecimal, boolean, java.lang.String
INTEGER int short, byte, long, float, double, java.math.BigDecimal, boolean, java.lang.String
BIGINT6 long int, short, byte, float, double, java.math.BigDecimal, boolean, java.lang.String
DECIMAL(p,s) 또는 NUMERIC(p,s) java.math.BigDecimal long, int, short, byte, float, double, boolean, java.lang.String
DECFLOAT (n)1,2 java.math.BigDecimal long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.lang.String
REAL float long, int, short, byte, double, java.math.BigDecimal, boolean, java.lang.String
이중 이중 long, int, short, byte, float, java.math.BigDecimal, boolean, java.lang.String
CHAR (n) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
VARCHAR (n) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
CHAR (n) FOR BIT DATA byte[] java.lang.String, java.io.InputStream, java.io.Reader
VARCHAR (n) FOR BIT DATA byte[] java.lang.String, java.io.InputStream, java.io.Reader
BINARY (n)7 byte[] 없음
VARBINARY (n)7 byte[] 없음
GRAPHIC (m) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
VARGRAPHIC (m) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
CLOB (n) java.sql.Clob java.lang.String
BLOB (n) java.sql.Blob byte []3
DBCLOB (m) 정확히 동일하지 않습니다.5  
ROWID java.sql.RowId byte[], com.ibm.db2.jcc.DB2RowID(더 이상 사용되지 않음)
XML4 java.sql.SQLXML byte[], java.lang.String, java.io.InputStream, java.io.Reader
DATE java.sql.Date java.sql.String, java.sql.Timestamp
시간 java.sql.Time java.sql.String, java.sql.Timestamp
TIMESTAMP, TIMESTAMP (p), TIMESTAMP WITH TIME ZONE, TIMESTAMP (p) WITH TIME ZONE8,9 java.sql.Timestamp java.sql.String, java.sql.Date, java.sql.Time, java.sql.Timestamp
주:
  1. n=16 또는 n=34.
  2. DECFLOAT는 Db2 for z/OS, Linux, UNIX및 Windows 시스템의 경우 Db2또는 IBM i 의 경우 Db2 데이터 서버에 대한 연결에 유효합니다. DECFLOAT를 사용하려면 SDK for Java Version 5 (1.5) 이상이 필요하다.
  3. 이 맵핑은 데이터 서버가 컬럼의 데이터 유형을 판별할 수 있는 경우에만 유효합니다.
  4. XML은 Db2 for z/OS 또는 Linux, UNIX및 Windows 시스템의 경우 Db2 데이터 서버에 대한 연결에 유효합니다.
  5. 특성 useJDBC4DataType이 DB2BaseDataSource.NO로 설정된 경우 java.sql.Clob을 사용하십시오. 특성 useJDBC4DataType이 설정되거나 DB2BaseDataSource.YES로 설정된 경우 java.sql.NClob를 사용하십시오.
  6. BIGINT는 Db2 for z/OS 데이터 서버, Linux, UNIX및 Windows 시스템의 경우 Db2 데이터 서버 및 지원되는 모든 IBM i 의 경우 Db2 데이터 서버에 대한 연결에 유효합니다.
  7. BINARY and VARBINARY are valid for connections to Db2 for z/OS data servers, IBM i 의 경우 Db2 5/OS V5R3 and later data servers, or Linux, UNIX및 Windows 시스템의 경우 Db2 data servers.
  8. p는 시간소인 정밀도를 표시하며 이는 시간소인의 소수 부분 자릿수입니다. 0<=p<=12. 기본값은 6입니다. TIMESTAMP (p) 는 Linux, UNIX및 Windows 시스템의 경우 Db2 V9.7 이상 및 Db2 for z/OS V10 이상에만 연결할 수 있도록 지원됩니다.
  9. WITH TIME ZONE절은 Db2 for z/OS 에 대한 연결에만 지원됩니다.

스토어드 프로시저 및 사용자 정의 함수 호출을 위한 데이터 유형

다음 표에는 사용자 정의 함수 및 스토어드 프로시저 매개변수를 호출하기 위한 JDBC 데이터 유형 및 Db2 또는 IBM Informix 데이터 유형에 대한 Java 데이터 유형의 맵핑이 요약되어 있습니다. Java 데이터 유형 대 JDBC 데이터 유형의 맵핑은 JDBC 프로그램의 CallableStatement.registerOutParameter 메소드를 위한 것입니다. 데이터 서버 데이터 유형에 대한 자바 데이터 유형의 맵핑은 스토어드 프로시저 또는 사용자 정의 함수 호출의 매개변수에 대한 것입니다.

다음 표에 여러 개의 Java 데이터 유형이 나열되어 있는 경우 첫 번째 데이터 유형은 권장 데이터 유형입니다.

테이블 3. 호출 스토어드 프로시저 및 사용자 정의 함수(UDF)용 Java, JDBC 및 SQL 데이터 유형의 맵핑
Java 데이터 유형 JDBC 데이터 유형 SQL 데이터 유형
부울3, java.lang.Boolean BOOLEAN BOOLEAN1,2
부울3, java.lang.Boolean BIT SMALLINT
바이트3, java.lang.Byte TINYINT SMALLINT
short, java.lang.Short SMALLINT SMALLINT
int, java.lang.Integer INTEGER INTEGER
long, java.lang.Long BIGINT BIGINT7
float, java.lang.Float REAL REAL
float, java.lang.Float FLOAT REAL
double, java.lang.Double DOUBLE 이중
java.math.BigDecimal NUMERIC DECIMAL
java.math.BigDecimal DECIMAL DECIMAL
java.math.BigDecimal java.types.OTHER DECFLOATn4
java.math.BigDecimal com.ibm.db2.jcc.DB2Types.DECFLOAT DECFLOATn4
java.lang.String CHAR CHAR
java.lang.String CHAR GRAPHIC
java.lang.String VARCHAR VARCHAR
java.lang.String VARCHAR VARGRAPHIC
java.lang.String LONGVARCHAR VARCHAR
java.lang.String VARCHAR CLOB
java.lang.String LONGVARCHAR CLOB
java.lang.String CLOB CLOB
byte[] BINARY CHAR FOR BIT DATA
byte[] VARBINARY VARCHAR FOR BIT DATA
byte[] BINARY BINARY6
byte[] VARBINARY VARBINARY6
byte[] LONGVARBINARY VARCHAR FOR BIT DATA
byte[] VARBINARY BLOB5
byte[] LONGVARBINARY BLOB5
java.sql.Date DATE DATE
java.sql.Time TIME 시간
java.sql.Timestamp TIMESTAMP TIMESTAMP, TIMESTAMP (p), TIMESTAMP WITH TIME ZONE, TIMESTAMP (p) WITH TIME ZONE8,9
java.sql.Blob BLOB BLOB
java.sql.Clob CLOB CLOB
java.sql.Clob CLOB DBCLOB
java.io.ByteArrayInputStream 없음 BLOB
java.io.StringReader 없음 CLOB
java.io.ByteArrayInputStream 없음 CLOB
com.ibm.db2.jcc.DB2RowID(더 이상 사용되지 않음) com.ibm.db2.jcc.DB2Types.ROWID ROWID
java.sql.RowId java.sql.Types.ROWID ROWID
com.ibm.db2.jcc.DB2Xml(더 이상 사용되지 않음) com.ibm.db2.jcc.DB2Types.XML XML AS CLOB
java.sql.SQLXML java.sql.Types.SQLXML XML
java.sql.SQLXML java.sql.Types.SQLXML XML AS CLOB
java.sql.Array java.sql.Types.ARRAY ARRAY2
java.sql.Struct java.sql.Types.STRUCT ROW1,2
java.sql.ResultSet com.ibm.db2.jcc.DB2Types.CURSOR CURSOR 유형2
주:
  1. 이 매개변수 데이터 유형은 IBM Data Server Driver for JDBC and SQLJ 유형 4 연결 에서 Linux, UNIX및 Windows 시스템의 경우 Db2 에만 지원됩니다.
  2. 이 매개변수 데이터 유형은 스토어드 프로시저 호출에만 지원됩니다.
  3. SMALLINT 매개변수로 정의된 스토어드 프로시저 또는 사용자 정의 함수(UDF)는 boolean 또는 byte 매개변수로 호출할 수 있습니다. 그러나 이는 권장되지 않습니다.
  4. Java 루틴의 DECFLOAT 매개변수는 Db2 for z/OS 데이터 서버에 대한 연결에만 유효합니다. Java 루틴의 DECFLOAT 매개변수는 for Linux, UNIX및 Windows 또는 IBM i 의 경우 Db2에 대한 연결에 지원되지 않습니다. DECFLOAT를 사용하려면 SDK for Java Version 5 (1.5) 이상이 필요하다.
  5. 이 맵핑은 데이터 서버가 컬럼의 데이터 유형을 판별할 수 있는 경우에만 유효합니다.
  6. BINARY and VARBINARY are valid for connections to Db2 for z/OS data servers, IBM i 의 경우 Db2 5/OS V5R3 and later data servers, or Linux, UNIX및 Windows 시스템의 경우 Db2 data servers.
  7. BIGINT는 Db2 for z/OS 데이터 서버 및 Linux, UNIX및 Windows 시스템의 경우 Db2 데이터 서버에 대한 연결에 유효합니다.
  8. p는 시간소인 정밀도를 표시하며 이는 시간소인의 소수 부분 자릿수입니다. 0<=p<=12. 기본값은 6입니다. TIMESTAMP (p) 는 Linux, UNIX및 Windows 시스템의 경우 Db2Db2 for z/OS에 대한 연결에 지원됩니다.
  9. WITH TIME ZONE절은 Db2 for z/OS에 대한 연결에 대해 지원됩니다.

자바 스토어드 프로시저 및 사용자 정의 함수의 데이터 유형

다음 표에서는 해당 자바 스토어드 프로시저 또는 사용자 정의 함수 메소드의 데이터 유형에 대한 CREATE PROCEDURE 또는 CREATE FUNCTION문의 SQL 매개변수 데이터 유형 맵핑을 요약한다.

Linux, UNIX및 Windows 시스템의 경우 Db2의 경우, 두 개 이상의 Java 데이터 유형이 SQL 데이터 유형에 대해 나열되는 경우 먼저 Java 데이터 유형만 유효합니다.

Db2 for z/OS의 경우, 둘 이상의 Java 데이터 유형이 나열되고 첫 번째 데이터 유형이 아닌 다른 데이터 유형을 메소드 매개변수로 사용하는 경우, 메소드 매개변수의 Java 데이터 유형을 지정하는 CREATE PROCEDURE 또는 CREATE FUNCTION문의 EXTERNAL절에 메소드 서명을 포함해야 합니다.

표 4. CREATE PROCEDURE 또는 CREATE FUNCTION문의 SQL 데이터 유형 대 해당 Java 스토어드 프로시저 또는 사용자 정의 함수(UDF) 프로그램의 데이터 유형 맵핑
CREATE PROCEDURE 또는 CREATE FUNCTION의 SQL 데이터 유형 Java 스토어드 프로시저 또는 사용자 정의 함수 메소드의 데이터 유형2
SMALLINT short, java.lang.Integer
BOOLEAN1 부울
INTEGER int, java.lang.Integer
BIGINT3 long, java.lang.Long
REAL float, java.lang.Float
이중 double, java.lang.Double
DECIMAL java.math.BigDecimal
DECFLOAT4 java.math.BigDecimal
CHAR java.lang.String
VARCHAR java.lang.String
CHAR FOR BIT DATA byte[]
VARCHAR FOR BIT DATA byte[]
BINARY5 byte[]
VARBINARY5 byte[]
DATE java.sql.Date
시간 java.sql.Time
TIMESTAMP, TIMESTAMP (p), TIMESTAMP WITH TIME ZONE, TIMESTAMP (p) WITH TIME ZONE6,7 java.sql.Timestamp
BLOB java.sql.Blob
CLOB java.sql.Clob
DBCLOB java.sql.Clob
ROWID java.sql.Types.ROWID
ARRAY1 java.sql.Array
1 java.sql.Struct
XML AS CLOB java.sql.Types.SQLXML
주:
  1. 이 매개변수 데이터 유형은 스토어드 프로시저에 대해서만 지원됩니다.
  2. Linux, UNIX및 Windows 시스템의 경우 Db2 서버에서 스토어드 프로시저 또는 사용자 정의 함수의 경우 먼저 데이터 유형만 유효합니다.
  3. BIGINT는 Db2 for z/OS 데이터 서버 또는 Linux, UNIX및 Windows 시스템의 경우 Db2 데이터 서버에 대한 연결에 유효합니다.
  4. Java 루틴의 DECFLOAT 매개변수는 Db2 for z/OS 데이터 서버에 대한 연결에만 유효합니다. Java 루틴의 DECFLOAT 매개변수는 for Linux, UNIX및 Windows 또는 IBM i 의 경우 Db2에 대한 연결에 지원되지 않습니다. DECFLOAT를 사용하려면 SDK for Java Version 5 (1.5) 이상이 필요하다.
  5. BINARY and VARBINARY are valid for connections to Db2 for z/OS data servers, IBM i 의 경우 Db2 5/OS V5R3 or later data servers, or Linux, UNIX및 Windows 시스템의 경우 Db2 data servers.
  6. p는 시간소인 정밀도를 표시하며 이는 시간소인의 소수 부분 자릿수입니다. 0<=p<=12. 기본값은 6입니다. TIMESTAMP (p) 는 Linux, UNIX및 Windows 시스템의 경우 Db2 데이터 서버 및 Db2 for z/OS 데이터 서버에 대한 연결에 대해 지원됩니다.
  7. WITH TIME ZONE절은 Db2 for z/OS 데이터 서버에 대한 연결에 대해 지원됩니다.