SQLite C/C++ 教程

目录html

安装code

在咱们开始使用SQLiteC / C++程序,咱们须要确保SQLite库设置的机器上。您能够检查SQLite安装章了解安装过程sqlite

 

详情请见:http://www.cnblogs.com/BoyXiao/archive/2012/03/31/2426495.html

 

C/C++ Interface APIs

如下是重要的C&C + + / SQLite接口程序能够知足你的要求使用SQLite数据库从您的C / C++程序。若是你正在寻找一个更复杂的应用程序,而后你能够看看SQLite官方文档。

 

S.N 

API 

sqlite3_open(const char *filename, sqlite3 **ppDb)

 

这个例程打开一个链接到SQLite数据库的文件,并返回一个数据库链接对象被其余使用SQLite例程。

 

若是文件名参数是NULL或内存:,sqlite3_open()将建立一个内存数据库在RAM,只持续时间的会议。

 

若是文件名不是NULL,sqlite3_open()尝试打开数据库文件经过使用它的价值。若是没有叫这个名字的文件存在,sqlite3_open()将打开一个新的数据库文件的名称。

sqlite3_exec(sqlite3*,const char *sql, sqlite_callback, void *data, char **errmsg)

 

这个程序提供了一种快速、简单的方法来执行SQL命令提供的SQL参数能够包含一个以上的SQL命令。

 

这里,第一个参数sqlite3开放数据库对象,sqlite_callback回调数据是第一参数和errmsg将返回来捕获任何错误提出的例行公事。

 

sqlite3_exec()例程解析并执行每一个命令的sql参数,直到到达结束的字符串或遇到错误。

sqlite3_close(sqlite3*)

 

这个例程关闭数据库链接调用sqlite3_open以前打开的()。与链接相关联的全部准备好的语句应在关闭链接以前完成。

 

若是任何疑问仍然没有完成,sqlite3_close()将返回SQLITE_BUSY因为unfinalized语句错误消息没法关闭。

 

如下代码要求提示:

    每一例子建立的数据库,都是基于前一个数据库建立的。不然如下代码均不能运行!!

链接到数据库

C代码片断展现了如何链接到现有的数据库。若是数据库不存在,那么它将被建立并最终将返回一个数据库对象。

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

 

int main(int argc, char* argv[])

{

sqlite3 *db;

char *zErrMsg = 0;

int rc;

 

rc = sqlite3_open("test.db", &db);

 

if( rc ){

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

exit(0);

}else{

fprintf(stderr, "Opened database successfully\n");

}

sqlite3_close(db);

}

如今,让咱们来编译和运行程序来建立咱们的数据库测试之上。db在当前目录。你能够改变你的路径按您的需求。

$gcc test.c -l sqlite3

$./a.out

Opened database successfully

 

若是你要使用c++源代码,而后你能够编译代码以下:

$g++ test.c -l sqlite3

 

咱们链接咱们的程序与sqlite3图书馆提供所需功能的C程序。这将建立一个数据库文件测试。db目录,你会有什么结果以下

 

-rwxr-xr-x. 1 root root 7383 May  8 02:06 a.out
-rw-r--r--. 1 root root  323 May  8 02:05 test.c
-rw-r--r--. 1 root root    0 May  8 02:06 test.db

 

 

 

建立表

接着,这段C代码段将用于之前建立的数据库中建立一个表

 

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

 

static int callback(void *NotUsed, int argc, char **argv, char **azColName){

int i;

for(i=0; i<argc; i++){

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

}

printf("\n");

return 0;

}

 

int main(int argc, char* argv[])

{

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

 

/* Open database */

rc = sqlite3_open("test.db", &db);

if( rc ){

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

exit(0);

}else{

fprintf(stdout, "Opened database successfully\n");

}

 

/*** 产生SQL语句 ***/

sql = "CREATE TABLE COMPANY(" \

"ID INT PRIMARY KEY NOT NULL," \

"NAME TEXT NOT NULL," \

"AGE INT NOT NULL," \

"ADDRESS CHAR(50)," \

"SALARY REAL );";

 

/*** 执行SQLite语句***/

rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

if( rc != SQLITE_OK ){

fprintf(stderr, "SQL error: %s\n", zErrMsg);

sqlite3_free(zErrMsg);

}else{

fprintf(stdout, "Table created successfully\n");

}

sqlite3_close(db);

return 0;

}

 

以上程序编译和执行时,它将建立公司在您的测试表。db和最终的清单文件将以下:

-rwxr-xr-x. 1 root root 9567 May  8 02:31 a.out
-rw-r--r--. 1 root root 1207 May  8 02:31 test.c
-rw-r--r--. 1 root root 3072 May  8 02:31 test.db

 

插入操做

这段C代码段显示了如何建立记录在咱们公司中建立表上面的例子:

 

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

 

static int callback(void *NotUsed, int argc, char **argv, char **azColName){

int i;

for(i=0; i<argc; i++){

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

}

printf("\n");

return 0;

}

 

int main(int argc, char* argv[])

{

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

 

/* Open database */

rc = sqlite3_open("test.db", &db);

if( rc ){

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

exit(0);

}else{

fprintf(stderr, "Opened database successfully\n");

}

 

/* Create SQL statement */

sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\

"VALUES (1, 'Paul', 32, 'California', 20000.00 ); "\

"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\

"VALUES (2, 'Allen', 25, 'Texas', 15000.00 );      "\

"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\

"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );     "\

"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\

"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); ";

 

/* Execute SQL statement */

rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);

if( rc != SQLITE_OK ){

fprintf(stderr, "SQL error: %s\n", zErrMsg);

sqlite3_free(zErrMsg);

}else{

fprintf(stdout, "Records created successfully\n");

}

sqlite3_close(db);

return 0;

}

以上程序编译和执行时,它将建立鉴于公司表和记录将显示如下两行:

Opened database successfully
Records created successfully

 

查询操做

在咱们继续进行以前,获取记录,与实际例子让我给一个小细节的回调函数,咱们使用咱们的例子。这个回调提供了一种方法来获取SELECT语句的结果。它具备如下声明:

 

typedefint(*sqlite3_callback)(

void*,/*提供sqlite3_exec 4参数的数据() */

int,/*行中的列数 */

char**,/*表明行中的字段的字符串数组*/

char**/*一个字符串数组表明列名 */

);

若是上面的回调提供了sqlite_exec做为第三个参数()例程,SQLite将为每一个记录调用这个回调函数处理每一个SELECT语句内执行SQL参数。

 

C代码段显示咱们如何获取和显示记录从咱们公司表中建立上面的例子:

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

 

static int callback(void *data, int argc, char **argv, char **azColName){

int i;

fprintf(stderr, "%s: ", (const char*)data);

for(i=0; i<argc; i++){

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

}

printf("\n");

return 0;

}

 

int main(int argc, char* argv[])

{

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

const char* data = "Callback function called";

 

/* Open database */

rc = sqlite3_open("test.db", &db);

if( rc ){

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

exit(0);

}else{

fprintf(stderr, "Opened database successfully\n");

}

 

/* Create SQL statement */

sql = "SELECT * from COMPANY";

 

/* Execute SQL statement */

rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);

if( rc != SQLITE_OK ){

fprintf(stderr, "SQL error: %s\n", zErrMsg);

sqlite3_free(zErrMsg);

}else{

fprintf(stdout, "Operation done successfully\n");

}

sqlite3_close(db);

return 0;

} 

 

当以上程序编译和执行,这将产生如下结果:

Opened database successfully 
Callback function called: ID = 1 
NAME = Paul 
AGE = 32 
ADDRESS = California 
SALARY = 25000.0 

 

Callback function called: ID = 2 
NAME = Allen 
AGE = 25 
ADDRESS = Texas 
SALARY = 15000.0 

 

Callback function called: ID = 3 
NAME = Teddy 
AGE = 23 
ADDRESS = Norway 
SALARY = 20000.0 

 

Callback function called: ID = 4 
NAME = Mark 
AGE = 25 
ADDRESS = Rich-Mond 
SALARY = 65000.0 

 

Operation done successfully 

 

更新操做

C代码片断展现了如何使用UPDATE语句更新任何记录,而后获取和显示从咱们公司表更新记录:

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

static int callback(void *data, int argc, char **argv, char **azColName){

int i;

fprintf(stderr, "%s: ", (const char*)data);

for(i=0; i<argc; i++){

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

}

printf("\n");

return 0;

}

int main(int argc, char* argv[])

{

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

const char* data = "Callback function called";

 

/* Open database */

rc = sqlite3_open("test.db", &db);

if( rc ){

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

exit(0);

}else{

fprintf(stderr, "Opened database successfully\n");

}

 

/* Create merged SQL statement */

sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " \

"SELECT * from COMPANY";

 

/* Execute SQL statement */

rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);

if( rc != SQLITE_OK ){

fprintf(stderr, "SQL error: %s\n", zErrMsg);

sqlite3_free(zErrMsg);

}else{

fprintf(stdout, "Operation done successfully\n");

}

sqlite3_close(db);

return 0;

}

 

删除操做

C代码片断展现了如何使用DELETE语句删除任何记录,而后获取并显示剩余记录从咱们公司表:

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

 

static int callback(void *data, int argc, char **argv, char **azColName){

int i;

fprintf(stderr, "%s: ", (const char*)data);

for(i=0; i<argc; i++){

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

}

printf("\n");

return 0;

}

 

int main(int argc, char* argv[])

{

sqlite3 *db;

char *zErrMsg = 0;

int rc;

char *sql;

const char* data = "Callback function called";

 

/* Open database */

rc = sqlite3_open("test.db", &db);

if( rc ){

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

exit(0);

}else{

fprintf(stderr, "Opened database successfully\n");

}

 

/* Create merged SQL statement */

sql = "DELETE from COMPANY where ID=2; " \

"SELECT * from COMPANY";

 

/* Execute SQL statement */

rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);

if( rc != SQLITE_OK ){

fprintf(stderr, "SQL error: %s\n", zErrMsg);

sqlite3_free(zErrMsg);

}else{

fprintf(stdout, "Operation done successfully\n");

}

sqlite3_close(db);

return 0;

}

当以上程序编译和执行,这将产生如下结果:

Opened database successfully 
Callback function called: ID = 1 
NAME = Paul 
AGE = 32 
ADDRESS = California 
SALARY = 20000.0 

 

Callback function called: ID = 3 
NAME = Teddy 
AGE = 23 
ADDRESS = Norway 
SALARY = 20000.0 

 

Callback function called: ID = 4 
NAME = Mark 
AGE = 25 
ADDRESS = Rich-Mond 
SALARY = 65000.0 

 

Operation done successfully
相关文章
相关标签/搜索