sqlapi 时间类型的应用
在项目开发的过程中,有一段时间需求要在数据库中存放时间类型 时间是数据库中经常要存放的数据,Oracle数据库有自己的时间类型,因此我也在官网(www.sqlapi.com)上查找时间类型转换的方法。
Oracle中实践类型为date C语言中也有时间类型 sqlapi使用的时间是一个对象 我是将存放到数据库中这个事务用一个函数完成的
我们看一下时间数据类型,(数据库中的就不说了):
//下面是C语言的数据格式 注意头文件中必须包含<time.h>
struct tm some_tm_Value; //时间类型结构体 C定义的
time_t t; //C基本的时间类型
t=time(NULL);
//一下是赋值过程 将本机当前时间localtime(&t)取到的各个数据存放到结构体中
some_tm_Value.tm_hour=localtime(&t)->tm_hour;
some_tm_Value.tm_isdst=localtime(&t)->tm_isdst;
some_tm_Value.tm_mday=localtime(&t)->tm_mday;
some_tm_Value.tm_min=localtime(&t)->tm_min;
some_tm_Value.tm_mon=localtime(&t)->tm_mon;
some_tm_Value.tm_sec=localtime(&t)->tm_sec;
some_tm_Value.tm_wday=localtime(&t)->tm_wday;
some_tm_Value.tm_yday=localtime(&t)->tm_yday;
some_tm_Value.tm_year=localtime(&t)->tm_year;
// SADateTime 是sqlapi的一个类 这个类支持将标准C语言的时间类型结构体直接赋值给这个类的对象
//具体还支持哪些时间类型格式参考:http://www.sqlapi.com/OnLineDoc/DateTime_cnstr.html
SADateTime dtValue = some_tm_Value;
这样 给时间字段赋值是就可以使用cmda.Param().setAsDateTime() = dtValue;赋值了 注意Param()这个中间要加上你需要给哪个变量赋值比如Param(2)
从数据库中取值的时候和上面的方法相反 赋值 但是要注意输出:
SACommand cmd1(&con,"select pressure,dateandtime from d");
try
{
con.Connect("orcl", "hr", "hr", SA_Oracle_Client);
// 执行查询语句
cmd1.Execute();
// 显示查询后的结果
SADateTime dtValue = cmd1.Field("dateandtime");
struct tm tmValue = dtValue;
while(cmd1.FetchNext())
{
SADateTime dtValue = cmd1.Field("dateandtime");
#ifdef UNICODE
wprintf(L"\t%7s\t%s \n",
cmd1.Field("pressure").asString(),cmd1.Field("dateandtime").asString());
#else
printf("%7s\t%s \n",
cmd1.Field("pressure").asString(),cmd1.Field("dateandtime").asString());
#endif
}
}
上面这段代码只是实现从数据库b中检索出对应的值和时间值 cmd1.Field("dateandtime").asString()这个方法就是将数据库中的字段"dateandtime"的数据读取 并且.asString()方法会将它转换成字符串的形式 以便c语言输出。
到现在为止,我们可能遇到的问题基本都能有解决的方式了,如果还遇到什么问题请首先向howto@sqlapi.com邮件列表提问,(我们没有购买这个库和相应的 服务,向人家提问问题很不厚道,呵呵) 但是注意:必须使用英文,这个不是我规定的,原因我不用说 了,基本上你白天发的邮件会在晚上或者第二天接到回复,不知道原因问地理老师。
我现在还是学生,所以也不是所有问题都能解决,我也是一个月前才接触sqlapi 获得的知识基本上都是从官方网站上和那个邮件中获得的。我只问了两次,并且两次都有回答,回答的内容还是官网的链接,所以如果可以,尽量从官网上获取信 息。