DABroker for C++

[目次][用語][索引][前へ][次へ]

7.1.5 データ型変換規則

<この項の構成>
(1) GetField,GetParamメソッド
(2) SetParamメソッド
(3) SetFieldメソッド

(1) GetField,GetParamメソッド

DBResultSetクラスのGetFieldメソッド,DBPreparedStatement,DBCallableStatementクラスのGetParamメソッドで取得するデータの,データ型変換規則を表7-7,及び表7-8に示します。

表7-7 GetField,GetParamメソッドでのデータ型変換規則(1)

DBMS
データ型
取得するデータ型
INT16 INT32 UINT16 UINT32
COL_CTYPE_INT16 (B) (A) (C) (A)
COL_CTYPE_INT32 (B) (C) (A)
COL_CTYPE_UINT16 (B) (A) (C) (A)
COL_CTYPE_UINT32 (B) (A) (C)
COL_CTYPE_SINGLE (B) (A) (C) (A)
COL_CTYPE_DOUBLE (B) (A) (C) (A)
COL_CTYPE_BOOLEAN (B) (A) (C) (A)
COL_CTYPE_CHAR f(atol)[B] f(atol)[A] f(strtoul) [C] f(strtoul) [A]
COL_CTYPE_DATETIME × × × ×
COL_CTYPE_BINARY × × × ×

表7-8 GetField,GetParamメソッドでのデータ型変換規則(2)

DBMS
データ型
取得するデータ型
SINGLE DOUBLE BOOLEAN LPTSTR DATE BINARY
COL_CTYPE_INT16 (D) (A) (E) H:f(ltoa)
AL:f(sprintf)
W:f(_ltoa)
× ×
COL_CTYPE_INT32 (D) (A) (E) H:f(ltoa)
AL:f(sprintf)
W:f(_ltoa)
× ×
COL_CTYPE_UINT16 (D) (A) (E) H:f(ultoa)
AL:f(sprintf)
W:f(_ultoa)
× ×
COL_CTYPE_UINT32 (D) (A) (E) H:f(ultoa)
AL:f(sprintf)
W:f(_ultoa)
× ×
COL_CTYPE_SINGLE (D) (A) (E) H:f(gcvt)
AL:f(gcvt)
W:f(_gcvt)
× ×
COL_CTYPE_DOUBLE (D) (E) H:f(gcvt)
AL:f(gcvt)
W:f(_gcvt)
× ×
COL_CTYPE_BOOLEAN (D) (A) (A) 1 × ×
COL_CTYPE_CHAR f(atof)[D] f(atof) [A] f(atof) [E] × 2
COL_CTYPE_DATETIME × × × × ×
COL_CTYPE_BINARY × × × × ×

(凡例)
○:変換しないで取得します。
×:取得できません(DB_ERROR_DATA_TRUNCATEDエラーをスローします)。
f(FUNC)[cast type]:FUNC(Cランタイム関数)で変換した後,cast typeの方法でキャストします。
(cast type):cast typeの方法でキャストします。
cast type
A:取得データ型にキャスト
B:(INT16)(INT32)Data (INT32にキャストし,その後INT16にキャストします)
C:(UINT16)(UINT32)Data
D:(SINGLE)(DOUBLE)Data
E:(BOOLEAN)(INT32)Data
H:HP-UXの場合
AL:AIXおよびRed Hat Linuxの場合
W:Windowsの場合

注※1 TRUEなら文字列"TRUE",FALSEなら文字列"FALSE"

注※2 COL_TYPE_CHAR,COL_TYPE_VARCHARの場合だけ取得できます。
その他の場合は,DB_ERROR_DATA_TRUNCATEDエラーをスローします。

(2) SetParamメソッド

DBCallableStatement,DBPreparedStatementクラスのSetParamメソッドで指定したデータがどのように変換されて,実際に設定されるのか,そのデータ型変換規則を表7-9に示します。

表7-9 SetParamメソッドでのデータ型変換規則

設定データ型 変換規則
INT16 そのまま設定
UINT16 INT16にキャストして設定
INT32 そのまま設定
UINT32 INT32にキャストして設定
SINGLE そのまま設定
DOUBLE そのまま設定
BOOLEAN INT16にキャストして設定
LPCTSTR そのまま設定(ただし,NULLポインタの場合は欠損値を設定)
DBR_DATETIME DBMSの内部データ形式に変換して設定
DBR_BINARY そのまま設定
注意
「そのまま設定」とあるものは,DBMSに対して指定されたままのデータ型で値を渡します。そのため指定された値が有効かどうかはDBMSに依存します。例えば,ORACLEのNUMBER型に対してはLPCTSTR型でも数字列を指定すればORACLEがデータ型を変換するため値を設定できますが,HiRDBのinteger型に対してLPCTSTR型で数字列を指定してもHiRDBでは文字列型は数値型に変換しないためエラーとなります。データを設定できるデータ型については,各DBMSのマニュアルを参照してください。

(3) SetFieldメソッド

DBResultSetクラスのSetFieldメソッドで設定するデータの,データ型変換規則を表7-10,及び表7-11に示します。

表7-10 SetFieldメソッドでのデータ型変換規則(1)

DBMS
データ型
設定するデータ型
INT16 INT32 UINT16 UINT32
COL_CTYPE_INT16 (INT16) (INT16) (INT16)
COL_CTYPE_INT32 (INT32) (INT32) (INT32)
COL_CTYPE_UINT16 1 1 1 1
COL_CTYPE_UINT32 1 1 1 1
COL_CTYPE_SINGLE (SINGLE) (SINGLE) (SINGLE) (SINGLE)
COL_CTYPE_DOUBLE (DOUBLE) (DOUBLE) (DOUBLE) (DOUBLE)
COL_CTYPE_BOOLEAN 1 1 1 1
COL_CTYPE_CHAR H:f(ltoa)
AL:f(sprintf)
W:f(_ltoa)
H:f(ltoa)
AL:f(sprintf)
W:f(_ltoa)
H:f(ultoa)
AL:f(sprintf)
W:f(_ultoa)
H:f(ultoa)
AL:f(sprintf)
W:f(_ultoa)
COL_CTYPE_DATETIME × × × ×
COL_CTYPE_BINARY × × × ×

表7-11 SetFieldメソッドでのデータ型変換規則(2)

DBMS
データ型
設定するデータ型
SINGLE DOUBLE BOOLEAN LPTSTR DATE BINARY
COL_CTYPE
_INT16
(INT16) (INT16) (INT16) (INT16)
f(atol)
× ×
COL_CTYPE
_INT32
(INT32) (INT32) (INT32) (INT32)
f(atol)
× ×
COL_CTYPE
_UINT16
1 1 1 1 1 1
COL_CTYPE
_UINT32
1 1 1 1 1 1
COL_CTYPE
_SINGLE
(SINGLE) (SINGLE) (SINGLE)
f(atof)
× ×
COL_CTYPE
_DOUBLE
(DOUBLE) (DOUBLE) (DOUBLE)
f(atof)
× ×
COL_CTYPE
_BOOLEAN
1 1 1 1 1 1
COL_CTYPE
_CHAR
H:f(gcvt)
AL:f(gcvt)
W:f(_gcvt)
H::f(gcvt)
AL:f(gcvt)
W:f(_gcvt)
2 × 3
COL_CTYPE
_DATETIME
× × × × 4 ×
COL_CTYPE
_BINARY
× × × × ×

(凡例)
○:変換しないで設定します。
×:設定できません(DB_ERROR_DATA_TRUNCATEDエラーをスローします)。
(data type):data typeにキャストして設定します。
f(func):func関数で変換して設定します。
(data type)f(func):func関数で変換した後,data typeでキャストして設定します。
H:HP-UXの場合
AL:AIXおよびRed Hat Linuxの場合
W:Windowsの場合

注※1 現在のバージョンでは,形式COL_CTYPE_UINT16,及び COL_CTYPE_UINT32, COL_CTYPE_BOOLEANはありません。

注※2 TRUEなら文字列"TRUE"を,FALSEなら文字列"FALSE"を設定します。

注※3 COL_TYPE_CHAR,COL_TYPE_VARCHARに対してだけ設定できます。

注※4 DBMSの内部データ形式に変換します。