当前位置:首页 > 行业动态 > 正文

c sqlite创建数据库

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、创建表

c sqlite创建数据库

编写创建表的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、查询数据

c sqlite创建数据库

编写查询数据的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、:如果在创建数据库或表时遇到权限问题,应该如何解决?

c sqlite创建数据库

:首先检查当前用户对数据库文件所在目录是否有写权限,如果没有,可以尝试使用具有更高权限的用户身份运行程序,或者更改数据库文件的存储位置到当前用户有写权限的目录,在一些操作系统上,可能需要以管理员身份运行程序才能创建数据库或表,如果是在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);,提交事务后,所有的更改将被永久保存到数据库中,如果提交事务失败,同样需要处理错误。