赞
踩
SQLite 是一种嵌入式 SQL 数据库引擎,其库文件大小小、速度快,常被用于轻量级的数据库应用开发,也广泛支持不同的编程语言,如 C、C++、Python 等。
在 C 语言中,SQLite 提供了一系列的 API 函数,用于与 SQLite 数据库交互,主要包括以下几类函数:
1.打开关闭数据库:
- int sqlite3_open(const char *filename, sqlite3 **ppDb);
- int sqlite3_close(sqlite3* db);
·filename:要打开的数据库文件名
·ppDb:指向sqlite3指针的指针,用于存储向打开的数据库连接的地址
sqlite3_open()函数用于打开一个SQLite数据库,返回一个sqlite3的指针,用于后续操作数据库。
sqlite3_close()函数用于关闭一个已打开的数据库。
2.执行SQL语句:
int sqlite3_exec(sqlite3* db, const char *sql, int (*callback)(void*, int, char**, char**), void* data, char **errmsg);
db:一个已经打开的数据库连接
sql:要执行的SQL语句
callback:回调函数,用于处理查询结果集
data:传递给回调函数的用户数据指针
errmsg:用于存储错误信息的指针
sqlite3_exec函数用于执行SQL语句,包括查询、修改、删除等操作。在执行SQL语句时,用户可以通过回调函数处理查询结果或错误消息。
3.获取执行错误信息
const char *sqlite3_errmsg(sqlite3*);
sqlite3_errmsg()函数用于获取最后一次执行的SQL语句的错误信息
4.获取查询结果
- int sqlite3_get_table(
- sqlite3* db, // 打开数据库的连接对象
- const char *sql, // 要执行的SQL查询语句
- char ***resultp, // 用于存储结果的二维数组
- int *nrow, // 存储结果行数的指针
- int *ncolumn, // 存储结果列数的指针
- char **errmsg // 用于存储错误信息的指针
- );
- void sqlite3_free_table(char **result);
db:一个已经打开的数据库连接对象
sql:要执行的SQL查询语句
resultp:一个指针用于存储结果集的行数
nrow:一个指针,用于存储结果集的行数
ncolumn:一个指针,用于存储结果集的列数
errmsg:用于存储错误信息的指针。如果函数执行成功,该指针将为NULL;如果执行失败,它将指向一个错误信息字符串
sqlite3_get_table()函数用于查询结果,并将结果以二维数据的形式返回。
sqlite3_free_table()函数用于释放查询结果所占用的内存。
下面是一份使用 SQLite3 API 函数的示例代码,用于创建一个简单的数据库,创建表格,并插入一条数据:
- #include <stdio.h>
- #include <sqlite3.h>
-
- int main(int argc, char* argv[])
- {
- sqlite3* db;
- char *err_msg = 0;
- int rc = sqlite3_open("test.db", &db);
-
- if (rc != SQLITE_OK)
- {
- fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
- sqlite3_close(db);
- return 1;
- }
-
- char* sql = "CREATE TABLE Persons("
- "PersonID INT PRIMARY KEY,"
- "LastName TEXT NOT NULL,"
- "FirstName TEXT,"
- "Age INT);";
-
- rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
-
- if (rc != SQLITE_OK)
- {
- fprintf(stderr, "SQL error: %s\n", err_msg);
- sqlite3_free(err_msg);
- }
-
- sql = "INSERT INTO Persons VALUES(1, 'Smith', 'John', 25);";
-
- rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
-
- if (rc != SQLITE_OK)
- {
- fprintf(stderr, "SQL error: %s\n", err_msg);
- sqlite3_free(err_msg);
- }
-
- sqlite3_close(db);
- return 0;
- }
- int sqlite3_prepare_v2(
- sqlite3 *db, /* 数据库句柄 */
- const char *zSql, /* SQL 查询语句 */
- int nByte, /* 将要使用的字节数 */
- sqlite3_stmt **ppStmt, /* 编译后生成的 SQL 程序句柄 */
- const char **pzTail /* 未编译部分的 SQL 查询语句 */
- );
sqlite_prepare_v2函数用于将SQL查询语句编译成SQLite程序,各参数含义如下:
db:数据库句柄
zaql:SQL查询语句
nByte:zSql查询语句中将要使用的字节数,如果设置为-1,则SQLite将自动计算zSql的长度
ppStmt:是一个指向指针的指针,用于存储编译后生成的SQL程序句柄
pzTail:是一个指向指针的指针,用于存储未编译的部分SQL查询语句
示例:
- #include <sqlite3.h>
- #include <stdio.h>
-
- int main(int argc, char **argv)
- {
- sqlite3 *db;
- sqlite3_stmt *stmt;
- const char *tail;
-
- char *sql = "SELECT * FROM my_table WHERE id = ?";
-
- if (sqlite3_open("my_database.db", &db) == SQLITE_OK)
- {
- if (sqlite3_prepare_v2(db, sql, -1, &stmt, &tail) == SQLITE_OK)
- {
- sqlite3_bind_int(stmt, 1, 1); // 绑定参数
- while (sqlite3_step(stmt) == SQLITE_ROW)
- {
- // 处理结果
- int id = sqlite3_column_int(stmt, 0);
- const unsigned char *name = sqlite3_column_text(stmt, 1);
- printf("id = %d, name = %s\n", id, name);
- }
- }
- sqlite3_finalize(stmt);
- }
-
- sqlite3_close(db);
- return 0;
- }
在 SQLite API 中还包括其他的一些函数,如开启事务、回滚事务、提交事务等,这里不再一一列举。
总之,SQLite 是一种轻量级的数据库引擎,并提供了丰富的 API 函数用于与其交互,用户可以通过这些函数实现 SQL 语句的执行、错误信息的获取,查询结果的处理等操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。