Linux ,c/c++, web,前端,php,js
分类: LINUX
2011-04-15 15:07:10
Linux下免费数据库PostgreSQL开发入门
本文介绍使用 C/C++ 结合数据库自带的 libpq 和 libPq++ 库来开发 Linux 下有名的免费数据库 PostgreSQL,详细描述了怎样使用开发库来操作数据的步骤和流程。
PostgreSQL 是一种运行在Unix和Linux操作系统(在NT平台借助Cygnus也可以运行)平台上的免费的开放源码的关系数据库。最早是由美国加州大学伯克利分校开发的,开始只是作为一个演示系统发表,但是随着时间的推移,逐步分发,得到很多实际的应用,才逐步流行起来。现在版本发展到了7.3.3。
荣誉:
2.主要功能和特性
3.数据类型
PostgreSQL支持丰富的数据类型,许多数据类型在商业数据库中都无法提供。
参数名称 | 最大范围 |
数据库大小 | 无限制 |
表大小 | 16TB(所有系统) |
一条记录大小 | 1.6GB |
字段大小 | 1GB |
表记录条数 | 无限制 |
表字段数 | 250-1600(取决于字段的数据类型) |
表索引 | 无限制 |
事实上不可能存在无限制的情况。支持16TB大小的表不是单一文件保存,而是分为多个文件存储的,所以不受限制于操作系统。
4.下载安装
我们可以到 网站下载,具体怎么安装我就不赘述,大家可以看文档,也可以看 参考中的中文网站的文档。在这里我就说说安装中需要注意的几个问题。
注意
initdb -pqlib=/usr/lib/pqsql -pqdata=/var/lib/pqsal |
5.常用命令
Createdb | 创建数据库 |
Createuser | 创建数据库用户 |
Dropdb | 删除数据库 |
Dropuser | 删除数据库用户 |
Psql | 交互式PostgreSQL前端工具,可以用它来操作数据库 |
Initdb | 初始化postgreSQL数据库 |
这里不是介绍怎样使用PostgreSQL数据库,所以对这些命令也不详细解释,可以参见文档说明和帮助。我在这里是假设读者已经安装并初始化好了数据库,并且会使用psql和熟练SQL来交互操作数据。
PostgreSQL提供很多不同语言的接口,有C、C++、Perl、Tcl等等,这里主要是介绍C/C++怎样连接到数据库,对数据进行添加,查询等操作。
1.C语言接口
PGconn *PQconnectdb( const char *conninfo) PGconn *PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions, const char *pgtty, const char *dbName, const char *login, const char *pwd) |
建立非阻塞连接函数
PGconn *PQconnectStart(const char *conninfo) PostgresPollingStatusType *PQconnectPoll(PQconn *conn) |
PGresult *PQexec(PGconn *conn,const char *query) 返回查询的结构集。 int PQntuples(const Pgresult *res) 返回查询结果里的记录个数。 int PQnfields(const Pgresult *res) 返回记录中的字段的个数。 char *PQfname(const Pgresult *res,int field_index)返回结构集中某一字段的名称。 Oid PQftype(const Pgresult *res, int field_index) 返回结构集中某一字段的数据类型。 char *PQgetvalue(const Pgresult *res,int tup_num, int field_index)返回结构集中某一条记录中某一个字段的值。 |
这里只列举最常用的一些函数,具体说明可以参见文档。
Oid lo_creat(PGconn *conn, int mode) | 创建一个新的大对象.mode 是一个位掩码,描述新对象的不同属性 |
Oid lo_import(PGconn *conn, const char *filename) | 把文件作为大对象导入数据库 |
int lo_export(PGconn *conn, Oid lobjId, const char *filename) | 大对象导入出数据库,保存为文件 |
int lo_open(PGconn *conn, Oid lobjId, int mode) | 打开一个现存的大对象 |
int lo_write(PGconn *conn, int fd, const char *buf, size_t len) | 大对象写入数据 |
int lo_read(PGconn *conn, int fd, char *buf, size_t len) | 从大对象读取数据 |
int lo_lseek(PGconn *conn, int fd, int offset, int whence) | 对大对象数据进行查找 |
int lo_close(PGconn *conn, int fd) | 关闭大对象描述符 |
函数在fe-lobj.c文件中定义,具体使用参见
上面函数的具体介绍请参见 文档 在这里就不详细介绍了。这里省略列举状态检查函数,参见参考文档。
使用C语言访问数据库的除了libpq库,还有其他如 libpqeasy,ecpg 等接口。
2.C++语言接口
libpq++ 类继承关系图
PgConnection成员函数 | |
PgConnection(const char* conninfo) | 参数同下 |
Connect(const char* conninfo) | 同 PQconnectdb |
Exec(const char* query) | 同 PQexec |
ExecCommandOk(const char* query) | 运行命令并检查状态是否PGRES_COMMAND_OK |
ExecTuplesOk(const char* query) | 运行查询并检查状态是否PGRES_TUPLES_OK |
IntToString(int n) | 数字转换为字符串 |
ConnectionBad() | 连接是否失败 |
ErrorMessage() | 返回错误信息 |
DBName() | 同 PQdb |
详细说明参见文档
PgDatabase 的常用成员函数 | |
PgDatabase(const char* conninfo) | 构造函数连接到数据库,跟 Pqconnectdb参数相同 |
Tuples() | 同 PQntuples(); |
CmdTuples() | 同 PQcmdTuples |
Fields() | 同 PQnfields |
FieldName(int field_num) | 同 PQfname |
FieldNum(const char* field_name) | 同 PQfnumber |
FieldType(int ield_num) FieldType(const char* field_name) | 同 PQftype |
FieldSize(int field_num) FieldSize(const char* field_name) | 同 PQfsize |
GetValue(int tup_num, int field_num) GetValue(int tup_num, const char* field_name) | 同 PQgetvalue |
GetIsNull(int tup_num, int field_num) GetIsNull(int tup_num, const char* field_name) | 同 PQgetisnull |
GetLength(int tup_num, int field_num) GetLength(int tup_num, const char* field_name) | 同 PQgetlength |
GetLine(char* string, int length) | 同 PQgetline |
PutLine(const char* string) | 同 PQputline |
EndCopy() | 同 PQendcopy |
以 postgres 用户或者具有建立数据库用户权限的用户登录 Linux,先建立数据库。
[zuojin@itpark85 zuojin]$createdb test_db |
然后使用 psql 连接到数据库
[zuojin@itpark85 zuojin]$psql test_db |
连接到数据库建立表,如下图所示
插入测试用数据,如图:
(注意:psql中输入SQL语句要以"; "结束才执行,帮助命令是"\\?",退出命令是"\\q")。
#include |
运行结果如图所示
#include |
运行结果如图所示
本文的样例代码: testC.c、 testC++.cpp。
原文链接:http://www-128.ibm.com/developerworks/cn/linux/l-pgsql/index.html