sqlite3_exec
时间: 2023-07-17 21:11:25 浏览: 62
`sqlite3_exec`是SQLite库中的一个函数,用于执行SQL语句。它可以执行任意的SQL语句,包括创建表格、插入数据、更新数据、删除数据和查询数据等操作。
以下是`sqlite3_exec`函数的原型:
```c
int sqlite3_exec(sqlite3* db, const char* sql, int (*callback)(void*, int, char**, char**), void* data, char** errmsg);
```
其中,参数说明如下:
- `db`:指向已打开的SQLite数据库的指针。
- `sql`:要执行的SQL语句,可以是一个或多个语句的组合。
- `callback`:回调函数,用于处理查询结果。可以为NULL,表示不需要处理查询结果。
- `data`:传递给回调函数的指针,可以是任意类型的数据。
- `errmsg`:用于存储错误信息的指针。如果发生错误,将会将错误信息存储在该指针指向的字符串中。
以下是一个简单的示例,展示了如何使用`sqlite3_exec`函数执行SQL语句:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
// 回调函数,用于处理查询结果
static int callback(void *data, 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() {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
// 打开数据库
rc = sqlite3_open("test.db", &db);
if(rc){
fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
return(0);
}else{
fprintf(stderr, "成功打开数据库\n");
}
// 创建表格
const char *sql_create = "CREATE TABLE IF NOT EXISTS fruits("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"name TEXT NOT NULL,"
"price REAL NOT NULL);";
rc = sqlite3_exec(db, sql_create, callback, 0, &zErrMsg);
if(rc != SQLITE_OK){
fprintf(stderr, "SQL错误: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
fprintf(stdout, "成功创建表格\n");
}
// 插入数据
const char *sql_insert = "INSERT INTO fruits (name, price) "
"VALUES ('苹果', 5), "
"('香蕉', 3), "
"('梨', 3.5);";
rc = sqlite3_exec(db, sql_insert, callback, 0, &zErrMsg);
if(rc != SQLITE_OK){
fprintf(stderr, "SQL错误: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
fprintf(stdout, "成功插入数据\n");
}
// 查询数据
const char *sql_select = "SELECT * FROM fruits;";
rc = sqlite3_exec(db, sql_select, callback, 0, &zErrMsg);
if(rc != SQLITE_OK){
fprintf(stderr, "SQL错误: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
// 关闭数据库
sqlite3_close(db);
return 0;
}
```
这个示例展示了如何使用`sqlite3_exec`函数创建一个名为`fruits`的表格,并向表格中插入数据。然后,通过执行查询语句获取并打印所有数据。
请注意,您需要在编译代码之前安装SQLite库,并在编译命令中链接SQLite库。
希望对您有所帮助!如果您有进一步的问题,请随时提问。