c语言有date类型数据类型,数据类型

数据类型

要在程序和数据库服务器间传输信息,每个数据项都必须有一个数据类型。可使用任何一种受支持的类型创建主机变量。

仅有有限数量的 C 数据类型可作为主机变量。而且,某些主机变量类型没有对应的 C 类型。

在头文件 sqlca.h 中定义的宏可用于声明 VARCHAR、FIXCHAR、BINARY、DECIMAL 或 SQLDATETIME 类型的主机变量。这些宏的用法如下:EXEC SQL BEGIN DECLARE SECTION;

DECL_VARCHAR( 10 ) v_varchar;

DECL_FIXCHAR( 10 ) v_fixchar;

DECL_BINARY( 4000 ) v_binary;

DECL_DECIMAL( 10, 2 ) v_packed_decimal;

DECL_DATETIME v_datetime;

EXEC SQL END DECLARE SECTION;

预处理器能够识别声明部分中的这些宏,并可将变量视为相应的类型。

以下数据类型受嵌入式 SQL 编程接口的支持:

16 位有符号整数。short int I;

unsigned short int I;

32 位有符号整数。long int l;

unsigned long int l;

4 字节浮点数float f;

8 字节浮点数double d;

压缩十进制数DECL_DECIMAL(p,s)

typedef struct TYPE_DECIMAL {

char array[1];

} TYPE_DECIMAL;

以 NULL 终止并以空白填充的字符串char a[n]; /* n > 1 */

char *a; /* n = 2049 */

因为 C 语言数组还必须保存 NULL 终止符,所以 char a[n] 数据类型映射为 CHAR(n - 1) SQL 数据类型(可保存 -1 个字符)。

注意

SQL 预处理器假定字符指针指向一个大小为 2049 字节的字符数组,此数组可安全地保存 2048 个字符以及 NULL 终止符。换句话说,将 char* 数据类型映射为 CHAR(2048) SQL 类型。如果不是这样,则应用程序可能会发生内存出错。

如果使用的是 16 位编译器,则要求 2049 个字节可能会使程序堆栈溢出。这时,可改用已声明数组(即使是作为函数的一个参数),以使 SQL 预处理器知道该数组的大小。WCHAR 和 TCHAR 的行为与 char 类似。

以 NULL 终止的 UNICODE 或宽字符字符串

每个字符占用两个字节的空间,所以可能包含 UNICODE 字符。WCHAR a[n]; /* n > 1 */

以 NULL 终止的、依赖于系统的字符串

对于使用 UNICODE 作为其字符集的系统(例如 Windows Mobile)而言,TCHAR 等效于 WCHAR;否则,TCHAR 等效于 char。TCHAR 数据类型设计为自动支持这两种系统中的字符串。TCHAR a[n]; /* n > 1 */

以空格填充的固定长度字符串char a; /* n = 1 */

DECL_FIXCHAR(n) a; /* n >= 1 */

带有两字节长度字段的可变长度字符串

在向数据库服务器提供信息时,您必须设置长度字段。从数据库服务器读取信息时,服务器将设置长度字段(不填充空白)。DECL_VARCHAR(n) a; /* n >= 1 */

typedef struct VARCHAR {

a_sql_ulen len;

TCHAR array[1];

} VARCHAR;

带有两字节长度字段的可变长度二进制数据

在向数据库服务器提供信息时,您必须设置长度字段。在从数据库服务器读取信息时,服务器将设置长度字段。DECL_BINARY(n) a; /* n >= 1 */

typedef struct BINARY {

a_sql_ulen len;

unsigned char array[1];

} BINARY;

SQLDATETIME 结构,对于时间戳的每一部分都有一个字段DECL_DATETIME a;

typedef struct SQLDATETIME {

unsigned short year; /* for example: 1999 */

unsigned char month; /* 0-11 */

unsigned char day_of_week; /* 0-6, 0 = Sunday */

unsigned short day_of_year; /* 0-365 */

unsigned char day; /* 1-31 */

unsigned char hour; /* 0-23 */

unsigned char minute; /* 0-59 */

unsigned char second; /* 0-59 */

unsigned long microsecond; /* 0-999999 */

} SQLDATETIME;

SQLDATETIME 结构用于检索 DATE、TIME 和 TIMESTAMP 类型(或者可转换为这些类型之一的任意类型)的字段。应用程序常常具有它们自己的格式和日期操作代码。在该结构中读取数据可为操作该数据提供更多方便。注意,您也可以使用任何字符类型来读取和更新

DATE、TIME 和 TIMESTAMP 字段。

如果您使用 SQLDATETIME 结构将日期、时间或时间戳输入到数据库中,则会忽略 day_of_year 和 day_of_week 成员。

DT_LONGVARCHAR

可变长度长整型字符数据。该宏定义一个如下结构:#define DECL_LONGVARCHAR( size ) \

struct { a_sql_uint32 array_len; \

a_sql_uint32 stored_len; \

a_sql_uint32 untrunc_len; \

char array[size+1];\

}

DECL_LONGVARCHAR 结构可用于表示大于 32KB 的数据。可以一次读取全部数据,也可以使用 GET DATA 语句逐段读取。可以将全部数据一次提供给服务器,也可以通过使用 SET 语句附加到数据库变量中来逐段提供。该数据不是以空值终止的。

DT_LONGBINARY

长二进制数据。该宏定义一个如下结构:#define DECL_LONGBINARY( size ) \

struct { a_sql_uint32 array_len; \

a_sql_uint32 stored_len; \

a_sql_uint32 untrunc_len; \

char array[size]; \

}

DECL_LONGBINARY 结构可用于表示大于 32KB 的数据。可以一次读取全部数据,也可以使用 GET DATA 语句逐段读取。可以将全部数据一次提供给服务器,也可以通过使用 SET 语句附加到数据库变量中来逐段提供。

这些结构在 %SQLANY12%\SDK\Include\sqlca.h 文件中定义。VARCHAR、BINARY 和 TYPE_DECIMAL 类型包含一个单字符数组,它们对于声明主机变量没有帮助。但是,它们对于动态分配变量或强制转换其它变量的类型十分有用。

对于各种 DATE 和 TIME 数据库类型,没有相应的嵌入式 SQL 接口数据类型。这些数据库类型可使用 SQLDATETIME 结构或使用字符串来读取和更新。

没有表示 LONG VARCHAR 和 LONG BINARY 数据库类型的嵌入式 SQL 接口数据类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值