您好,欢迎访问一九零五行业门户网

使用C/C++和SQLite的SQL

在本节中,您将学习如何在 c/c++ 程序中使用 sqlite。
安装在开始在 c/c++ 程序中使用 sqlite 之前,您需要确保您的计算机上设置了 sqlite 库。您可以查看sqlite安装章节来了解安装过程。
c/c++接口api以下是重要的c/c++ sqlite接口例程,可以满足您使用sqlite的要求来自您的 c/c++ 程序的数据库。如果您正在寻找更复杂的应用程序,那么您可以查看sqlite官方文档。
序列号api 及说明
1 sqlite3_open(const char *filename, sqlite3 **ppdb)
此例程打开一个到 sqlite 数据库文件的连接,并返回一个数据库连接对象以供其他 sqlite 例程使用。
如果 filename 参数为null或':memory:',sqlite3_open()将在ram中创建一个内存数据库,该数据库仅在会话期间持续。
如果文件名不为null ,sqlite3_open() 尝试使用其值打开数据库文件。如果不存在该名称的文件,sqlite3_open() 将打开该名称的新数据库文件。
2 sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
此例程提供了一种快速、简单的方法来执行 sql 参数提供的 sql 命令,该参数可以包含多个 sql 命令。
这里,第一个参数 sqlite3 是一个打开的数据库对象,sqlite_callback 是一个回调,其中 data 是第一个参数,并且将返回 errmsg 以捕获例程引发的任何错误。
sqlite3_exec () 例程解析并执行 sql 参数中给出的每个命令,直到到达字符串末尾或遇到错误。
3 sqlite3_close(sqlite3*)
此例程关闭先前通过调用 sqlite3_open() 打开的数据库连接。与连接相关的所有准备好的语句应在关闭连接之前完成。
如果仍有任何查询尚未完成,sqlite3_close() 将返回 sqlite_busy 并显示错误消息由于未完成的语句,无法关闭。
连接到数据库以下 c 代码段显示了如何连接到现有数据库。如果数据库不存在,则创建数据库,最后返回数据库对象。
示例代码#include <stdio.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)); return(0); } else { fprintf(stderr, "opened database successfully\n"); } sqlite3_close(db);}
输出$gcc test.c -l sqlite3$./a.outopened database successfully
创建表以下 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)); return(0); } else { fprintf(stdout, "opened database successfully\n"); } /* create sql statement */ sql = "create table company(" \ "id int primary key not null," \ "name text not null," \ "age int not null," \ "address char(50)," \ "salary real );"; /* 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, "table created successfully\n"); } sqlite3_close(db); return 0;}
输出(检查数据库文件状态):-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 代码段显示了如何在上例中创建的 company 表中创建记录 –
示例代码#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)); return(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 successfullyrecords created successfully
select 操作在继续获取记录的实际示例之前,让我们看一下有关示例中使用的回调函数的一些详细信息。此回调提供了一种从 select 语句获取结果的方法。它有以下声明 –
typedef int (*sqlite3_callback)( void*, /* data provided in the 4th argument of sqlite3_exec() */ int, /* the number of columns in row */ char**, /* an array of strings representing fields in the row */ char** /* an array of strings representing column names */);
如果在 sqlite_exec() 例程中提供上述回调作为第三个参数,sqlite 将为 sql 参数内执行的每个 select 语句中处理的每个记录调用此回调函数。
以下 c 代码段显示如何从上例中创建的 company 表中获取和显示记录 –
示例代码#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)); return(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 successfullycallback function called: id = 1name = paulage = 32address = californiasalary = 20000.0callback function called: id = 2name = allenage = 25address = texassalary = 15000.0callback function called: id = 3name = teddyage = 23address = norwaysalary = 20000.0callback function called: id = 4name = markage = 25address = rich-mondsalary = 65000.0operation done successfully
以上就是使用c/c++和sqlite的sql的详细内容。
其它类似信息

推荐信息