您的位置:首页 > 数据库

sqlplus /nolog 是什么意思

2012-04-09 17:28 357 查看
sqlite3 编程只需要一个头文件与一个库文件,安装请看 sqlite3 在linux系统上的安装

/* filename: insert.c */
#include <stdio.h>
#include <sqlite3.h>

int main()
{
sqlite3 *db;
sqlite3_open("stu.db", &db);

char *sql = "insert into student values(10, 'james', 99)";
sqlite3_exec(db, sql, NULL, NULL, NULL);

sqlite3_close(db);
return 0;
}
如上代码,最简单的操作,只需要一个结构 "sqlite *db",
三个函数,"sqlite3_open()" "sqlite_exec()" "sqlite_close()"。
编译只需加上一个库链接
$ gcc insert.c -o insert -lsqlite3


sqlite3 是一个小巧的数据库,命令,接口都很简单,手册可以去官网 www.sqlite.org 查看,也可以下载来,离线查看,官网上的链接位置如下。
入门基本函数:Documentation -> SQLite Programming Interfaces -> Introduction to the C/C++ API
参考手册:Documentation -> SQlite Programming Interfaces -> C/C++ API Reference

数据库结构体:
typedef struct sqlite3 sqlite3;
sqlite3 *db;
关于这个结构体就不必多说,如上只要声名一个指针即可,如何操作都封装在库函数里了,之后用到的库函数的第一个参数大多都是这个结构体指针。

数据库的开关:
int sqlite3_open(const char *filename, sqlite3 **ppDb);
int sqlite3_close(sqlite3*);
"sqlite3_open()" 有两个参数,第一个是数据库的文件名,第二个是前面声名的指针取地址。

if (sqlite3_open("stu.db",&db))
{
puts(sqlite_errmsg(db));
exit(1);
}
常用的方式如上,sqlite3 中的函数保持了统一的风格,返回值表示了函数调用的结果,sqlite3 定义了 31 个基本返回值与 52 个扩展值。

(0) SLITE_OK,当函数成功时返回 0

成功就只有一种,但失败有各种失败情况,定义的 83 个返回值描述了 82 种失败的原因。

如果想打印出错误号的文字描述可以用上面的函数。

const char *sqlite3_errmsg(sqlite3*);
参数是前声名的数据库结构指针,返回值是字符串指针,如上直接打印即可。

数据库的操作:
int sqlite3_exec(sqlite3 *, const char *sql,
int (*callback)(void *, int, char **, char **), void *, char **errmsg);
看到如此复杂的函数,就知道了它能做很多的事情。事实上也是如此,它相当于一个 SQL 命令接口,直接把第二个参数的字符串转换成 SQL 语句去解析执行。

typedef int (*callback)(void *, int, char **, char **);

int sqlite3_exec(sqlite3 *, const char *sql, callback, void *, char **errmsg);
将第三个参数单拉出来,这样声名一个别名,"sqlite3_exec" 参数看着就很简捷了,有五个,第一个是数据库的结构体指针,第二个是 SQL 语句的字符串指针,第三个是回调函数,第四个是回调函数的参数,第五个是错误信息的字符串指针的取地址。前两个参数与最后一个参数的用法,如下。
char *errmsg;
if (sqlite_exec(db, "select * from student", NULL, NULL, &errmsg))
{
puts(errmsg);
sqlite3_free(errmsg);
exit(1);
}
前两个参数很好懂,第五个参数,先声名一个指针,然后取址传给 "sqlite3_exec",此函数在调用出错时会用 "sqlite3_malloc()" 分配一个空间存放错误的字串描述,所以出错的时候用完 "errmsg" 需要用 "sqlite3_free" 释放空间。

第三个参数,回调函数的用法如下。

int deal(void *arg, int ncol, char *data[], char *head[])
{
int i;
for (i = 0; i < ncol; i++)
printf("%s \t %s\n", head[i], data[i]);
}
这就上述的回调函数简单用法。有四个参数,第一个是 "sqlite3_exec" 主动传来的参数即 "sqlite3_exec" 的第四个参数。第二个参数,是查询结果的字段数,即结果的列数。第三个是查询的记录,用指针数组来存放,每个字段值用字符串存储,配合前个参数 "ncol" 就可以如上遍历整行记录了。第四个参数是表头,也是用指针数组来存储,每个字段名用字串存储,和前个参数一样用法。

重要的一点是,此回调函数是每查到一行记录就会回调一次,只处理一行记录。如果查询的结果有四行记录,就会被调用四次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: