免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4431 | 回复: 7

求助c代码psql数据库插值 [复制链接]

论坛徽章:
0
发表于 2008-08-21 15:20 |显示全部楼层
5可用积分
数据库里一张表mytable

mytable有两项
aaa 类型: integer
bbb 类型:timestamp without time zone

我写c代码,插入一条记录到表中,看了一下postgresql的手册,可以连上数据库了,
aaa可以用int 类型的一个值就能插入,时间值有,但是不知道timestamp without time zone
这个类型的值我用c语言什么类型的值对应,然后插入。

以前没有接触过数据库,请大家帮帮忙,把简单的代码写一下吧,谢谢啦。

论坛徽章:
0
发表于 2008-08-21 15:58 |显示全部楼层
如果 timestamp 数值是以双精度浮点数(目前的缺省)的方式存储的,那么有效精度会小于 6 。timestamp 值是以 2000-01-01 午夜之前或之后的秒数存储的,而微秒的精度是为那些在 2000-01-01 前后几年的日期实现的,对于那些远一些的日子,精度会下降。如果timestamp 以八字节整数存储(一个编译时的选项),那么微秒的精度就可以在数值的全部范围内都可以获得。不过,八位整数的时间戳范围缩小到 4713 BC 到 294276 AD 之间。同一个编译时选项也决定 time 和 interval 值是保存成浮点数还是八字节整数。在以浮点数存储的时候,随着时间间隔的增加,大的 interval 数值的精度会降低。

顺便问个问题:你为什么要使用timestamp类型?用于记录时间?如果是记录时间的话我一般建议用字符串的方式来记录,比如2008年8月21日就记载为'20080821',时间也一样处理

[ 本帖最后由 sunlan 于 2008-8-21 16:03 编辑 ]

论坛徽章:
0
发表于 2008-08-21 17:19 |显示全部楼层

回复 #2 sunlan 的帖子

非常谢谢!
不过有点看不太明白,你的意思是说timestamp在精度上有问题?
能不能帮忙写一下timestamp类型的值怎么通过c代码插入,谢谢!

论坛徽章:
0
发表于 2008-08-21 22:11 |显示全部楼层
缺省情况下timestamp类型是用双精度(double)表示的,双精度浮点值肯定会存在误差。值越大、误差也越大。所以说“微秒的精度是为那些在 2000-01-01 前后几年的日期实现的,对于那些远一些的日子,精度会下降”。

在ecpg的头文件pgtypes_timestamp.h中有对timestamp类型的定义:
#ifdef HAVE_INT64_TIMESTAMP
typedef int64 timestamp;
typedef int64 TimestampTz;
#else
typedef double timestamp;
typedef double TimestampTz;
#endif
缺省情况下使用的是double类型

论坛徽章:
0
发表于 2008-08-22 09:44 |显示全部楼层
你要说明一下在C中,你是用什么接口进行操作的,用ADO还是LIBPQ?

你是用什么方式插入的?直接写SQL语句吗?

论坛徽章:
0
发表于 2008-08-22 09:50 |显示全部楼层
原帖由 trainee 于 2008-8-22 09:44 发表
你要说明一下在C中,你是用什么接口进行操作的,用ADO还是LIBPQ?

你是用什么方式插入的?直接写SQL语句吗?

应该是用的ESQL/C吧

论坛徽章:
0
发表于 2008-08-26 19:47 |显示全部楼层

回复 #5 trainee 的帖子

用libpq写客户端代码插入。

论坛徽章:
0
发表于 2008-08-27 20:49 |显示全部楼层
找个libpg的示例看一下就行了,timestamp的类型对应成double
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP