c,#include,int main() {, sqlite3 db;, char err_msg = 0;, int rc = sqlite3_open("test.db", &db);, if (rc != SQLITE_OK) {, fprintf(stderr, "Cannot open database: %s,", sqlite3_errmsg(db));, sqlite3_close(db);, return 1;, }, const char sql = "CREATE TABLE IF NOT EXISTS students(id INTEGER PRIMARY KEY, name TEXT NOT NULL);";, rc = sqlite3_exec(db, sql, 0, 0, &err_msg);, if (rc != SQLITE_OK ) {, fprintf(stderr, "SQL error: %s,", err_msg);, sqlite3_free(err_msg);, sqlite3_close(db);, return 1;, } , sqlite3_close(db);, return 0;,},
“在C语言中使用SQLite创建数据库,主要涉及到以下几个关键步骤:
1、安装SQLite库
下载:从SQLite的官方网站(https://www.sqlite.org/download.html)下载适用于C语言的预编译二进制文件或源代码。
安装:将下载的文件解压到合适的目录,如果下载的是源代码,需要使用C编译器进行编译,以Linux系统为例,进入解压后的目录,执行./configure
命令生成Makefile文件,然后执行make
命令进行编译,最后执行make install
命令进行安装,安装完成后,确保SQLite库文件和头文件所在的路径被添加到系统的环境变量中,以便在编译C程序时能够找到它们。
2、包含SQLite头文件:在C源文件的开头,使用#include
指令包含SQLite的头文件,以便在程序中使用SQLite提供的功能。
#include <sqlite3.h>
3、打开数据库连接
定义一个sqlite3
类型的变量,用于表示数据库连接句柄。
sqlite3 db;
使用sqlite3_open
函数打开或创建一个数据库文件,该函数的第一个参数是数据库文件的名称(如果文件不存在,将会被创建),第二个参数是一个指向sqlite3
变量的指针,如果打开数据库成功,该函数返回SQLITE_OK
;否则,返回一个错误代码。
int rc = sqlite3_open("test.db", &db); if (rc) { fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db)); return 0; } else { fprintf(stdout, "Opened database successfully "); }
4、创建表
编写创建表的SQL语句,要创建一个名为students
的表,包含id
(整数类型)、name
(文本类型)和age
(整数类型)三个字段,可以使用以下SQL语句:
CREATE TABLE students ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER );
使用sqlite3_exec
函数执行上述SQL语句,该函数的第一个参数是数据库连接句柄,第二个参数是要执行的SQL语句,第三个参数是回调函数(如果不需要处理查询结果,可以传递NULL
),第四个参数是传递给回调函数的参数(如果不需要,也可以传递NULL
),第五个参数用于存储错误信息。
char sql = "CREATE TABLE students (" "id INTEGER PRIMARY KEY," "name TEXT NOT NULL," "age INTEGER" ");"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", errMsg); sqlite3_free(errMsg); } else { fprintf(stdout, "Table created successfully "); }
5、插入数据
编写插入数据的SQL语句,要向students
表中插入一条记录,其中id
为1,name
为“张三”,age
为20,可以使用以下SQL语句:
INSERT INTO students (id, name, age) VALUES (1, '张三', 20);
同样使用sqlite3_exec
函数执行插入数据的SQL语句。
char sqlInsert = "INSERT INTO students (id, name, age) VALUES (1, '张三', 20);"; rc = sqlite3_exec(db, sqlInsert, 0, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", errMsg); sqlite3_free(errMsg); } else { fprintf(stdout, "Records created successfully "); }
6、查询数据
编写查询数据的SQL语句,要查询students
表中的所有记录,可以使用以下SQL语句:
SELECT FROM students;
使用sqlite3_exec
函数执行查询数据的SQL语句,并定义一个回调函数来处理查询结果,回调函数的原型如下:
static int callback(void NotUsed, int argc, charargv, charazColName) { for (int i = 0; i < argc; i++) { printf("%s = %s ", azColName[i], argv[i] ? argv[i] : "NULL"); } printf(" "); return 0; }
然后执行查询操作:
char sqlSelect = "SELECT FROM students;"; rc = sqlite3_exec(db, sqlSelect, callback, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "Failed to select data "); fprintf(stderr, "SQL error: %s ", errMsg); sqlite3_free(errMsg); } else { fprintf(stdout, "Operation done successfully "); }
7、关闭数据库连接:在完成对数据库的操作后,使用sqlite3_close
函数关闭数据库连接。
sqlite3_close(db);
以下是一个完整的示例代码,展示了在C语言中使用SQLite创建数据库、创建表、插入数据和查询数据的全过程:
#include <stdio.h> #include <sqlite3.h> static int callback(void NotUsed, int argc, charargv, charazColName) { for (int i = 0; i < argc; i++) { printf("%s = %s ", azColName[i], argv[i] ? argv[i] : "NULL"); } printf(" "); return 0; } int main() { sqlite3 db; char errMsg = 0; int rc; // 打开数据库连接 rc = sqlite3_open("test.db", &db); if (rc) { fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db)); return 0; } else { fprintf(stdout, "Opened database successfully "); } // 创建表 char sqlCreate = "CREATE TABLE students (" "id INTEGER PRIMARY KEY," "name TEXT NOT NULL," "age INTEGER" ");"; rc = sqlite3_exec(db, sqlCreate, 0, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", errMsg); sqlite3_free(errMsg); } else { fprintf(stdout, "Table created successfully "); } // 插入数据 char sqlInsert = "INSERT INTO students (id, name, age) VALUES (1, '张三', 20);"; rc = sqlite3_exec(db, sqlInsert, 0, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s ", errMsg); sqlite3_free(errMsg); } else { fprintf(stdout, "Records created successfully "); } // 查询数据 char sqlSelect = "SELECT FROM students;"; rc = sqlite3_exec(db, sqlSelect, callback, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "Failed to select data "); fprintf(stderr, "SQL error: %s ", errMsg); sqlite3_free(errMsg); } else { fprintf(stdout, "Operation done successfully "); } // 关闭数据库连接 sqlite3_close(db); return 0; }
相关问答FAQs:
1、问:如果在创建数据库或表时遇到权限问题,应该如何解决?
答:首先检查当前用户对数据库文件所在目录是否有写权限,如果没有,可以尝试使用具有更高权限的用户身份运行程序,或者更改数据库文件的存储位置到当前用户有写权限的目录,在一些操作系统上,可能需要以管理员身份运行程序才能创建数据库或表,如果是在Windows系统下,可以尝试右键点击程序的可执行文件,选择“以管理员身份运行”。
2、问:如何在C语言中使用SQLite实现事务处理?
答:在C语言中使用SQLite实现事务处理可以通过以下步骤进行:
开始事务:使用sqlite3_exec
函数执行BEGIN TRANSACTION;
语句开始一个事务。sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, &errMsg);
,如果开始事务失败,需要处理错误并回滚事务。
执行多个SQL语句:在事务中可以执行多个SQL语句,如插入、更新、删除等操作,这些操作可以通过多次调用sqlite3_exec
函数或其他SQLite提供的函数来执行,每个操作都需要检查返回值以确保操作成功,如果某个操作失败,可以根据具体情况决定是回滚事务还是继续执行后续操作。
提交事务:如果所有操作都成功执行,使用sqlite3_exec
函数执行COMMIT;
语句提交事务。sqlite3_exec(db, "COMMIT;", NULL, NULL, &errMsg);
,提交事务后,所有的更改将被永久保存到数据库中,如果提交事务失败,同样需要处理错误。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1656582.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复