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
データ型
取得するデータ型
INT16INT32UINT16UINT32
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_CHARf(atol)[B]f(atol)[A]f(strtoul) [C]f(strtoul) [A]
COL_CTYPE_DATETIME××××
COL_CTYPE_BINARY××××

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

DBMS
データ型
取得するデータ型
SINGLEDOUBLEBOOLEANLPTSTRDATEBINARY
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_CHARf(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そのまま設定
UINT16INT16にキャストして設定
INT32そのまま設定
UINT32INT32にキャストして設定
SINGLEそのまま設定
DOUBLEそのまま設定
BOOLEANINT16にキャストして設定
LPCTSTRそのまま設定(ただし,NULLポインタの場合は欠損値を設定)
DBR_DATETIMEDBMSの内部データ形式に変換して設定
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
データ型
設定するデータ型
INT16INT32UINT16UINT32
COL_CTYPE_INT16(INT16)(INT16)(INT16)
COL_CTYPE_INT32(INT32)(INT32)(INT32)
COL_CTYPE_UINT161111
COL_CTYPE_UINT321111
COL_CTYPE_SINGLE(SINGLE)(SINGLE)(SINGLE)(SINGLE)
COL_CTYPE_DOUBLE(DOUBLE)(DOUBLE)(DOUBLE)(DOUBLE)
COL_CTYPE_BOOLEAN1111
COL_CTYPE_CHARH: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
データ型
設定するデータ型
SINGLEDOUBLEBOOLEANLPTSTRDATEBINARY
COL_CTYPE
_INT16
(INT16)(INT16)(INT16)(INT16)
f(atol)
××
COL_CTYPE
_INT32
(INT32)(INT32)(INT32)(INT32)
f(atol)
××
COL_CTYPE
_UINT16
111111
COL_CTYPE
_UINT32
111111
COL_CTYPE
_SINGLE
(SINGLE)(SINGLE)(SINGLE)
f(atof)
××
COL_CTYPE
_DOUBLE
(DOUBLE)(DOUBLE)(DOUBLE)
f(atof)
××
COL_CTYPE
_BOOLEAN
111111
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の内部データ形式に変換します。