C语言如何连接和读取SQLite数据库 (c 读取sqlite数据库连接)
SQLite是一种轻量级的关系型数据库管理系统,它被广泛应用于各种应用程序中,包括移动应用程序和桌面应用程序。虽然SQLite不支持完整的客户端/服务器数据库架构,但它被设计用于嵌入式系统,具有便携性和易用性。C语言作为一门强大的编程语言,也可以利用SQLite实现关系型数据库的操作。本文将介绍如何连接和读取SQLite数据库。
一、 安装SQLite
在使用SQLite前,需要先安装SQLite库文件和SQLite命令行工具。这可以通过SQLite官方网站下载安装包进行安装,官网下载链接:https://www.sqlite.org/download.html 。
二、 创建SQLite数据库
在SQLite中,可以使用sqlite3_open()函数在C语言中创建一个SQLite数据库。其函数原型如下:
int sqlite3_open(const char *filename, sqlite3 **ppDb);
其中,filename参数是数据库的名称,ppDb是指向sqlite3指针的指针,用于存储SQLite数据库的地址。下面是使用sqlite3_open()函数创建SQLite数据库的一个示例:
sqlite3 *db;
int rc = sqlite3_open(“test.db”, &db);
if (rc != SQLITE_OK) {
fprintf(stderr, “Cannot open database: %s\n”, sqlite3_errmsg(db));
return 1;
} else {
fprintf(stdout, “Database opened successfully\n”);
sqlite3_close(db);
return 0;
}
在上面的示例中,我们使用sqlite3_open()函数创建了一个名为“test.db”的SQLite数据库,并将其分配给一个名为“db”的指针。如果返回值不是SQLITE_OK,则输出错误消息并退出程序。否则,输出成功消息并关闭数据库。
三、 SQLite数据库表的创建和插入
在SQLite中,可以通过执行SQL语句创建表格。在C语言中,可以使用sqlite3_exec()函数来执行SQL语句。其函数原型如下:
int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg);
其中,sqlite3 *参数是SQLite数据库的指针,sql参数是要执行的SQL语句,*callback参数是回调函数,void *是一个指向目标对象的指针,指向目标对象以便在回调函数中处理数据。errmsg参数是错误信息的指针。下面是一个创建SQLite数据库表的示例:
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open(“test.db”, &db);
if (rc) {
fprintf(stderr, “Cannot open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
fprintf(stdout, “Database opened successfully\n”);
}
const char *sql = “CREATE TABLE students(“
“id INT PRIMARY KEY NOT NULL,”
“name TEXT NOT NULL,”
“age INT NOT NULL,”
“gender TEXT NOT NULL);”;
rc = sqlite3_exec(db, sql, 0, 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);
在上面的示例中,我们创建了一个名为“students”的表格,并指定了它的主键、名称、年龄和性别的列。如果SQL语句执行成功,则输出成功消息。接下来,我们在该表格中插入一些数据。我们可以使用sqlite3_exec()函数执行SQL语句,如下所示:
rc = sqlite3_open(“test.db”, &db);
if (rc) {
fprintf(stderr, “Cannot open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
fprintf(stdout, “Database opened successfully\n”);
}
sql = “INSERT INTO students (id, name, age, gender) “
“VALUES (1, ‘John Doe’, 22, ‘Male’); “
“INSERT INTO students (id, name, age, gender) “
“VALUES (2, ‘Jane Smith’, 25, ‘Female’); “;
rc = sqlite3_exec(db, sql, 0, 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);
在上面的示例中,我们在“students”表格中插入了两条记录。如果我们将SQLite数据库视为一个文件,那么当我们执行完INSERT语句后,该文件将包含表格和插入的数据。
四、 读取SQLite数据库表
我们可以使用SQL语句从SQLite数据库表中读取数据。在C语言中,我们可以使用sqlite3_prepare()函数准备SQL语句,并使用sqlite3_step()函数执行SQL查询。下面是一个从“students”表格中读取数据的示例:
sqlite3 *db;
sqlite3_stmt *stmt;
int rc;
rc = sqlite3_open(“test.db”, &db);
if (rc) {
fprintf(stderr, “Cannot open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
fprintf(stdout, “Database opened successfully\n”);
}
const char *sql = “SELECT id, name, age, gender FROM students;”;
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
if (rc != SQLITE_OK) {
fprintf(stderr, “SQL error: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
char *name = (char *) sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
char *gender = (char *) sqlite3_column_text(stmt, 3);
printf(“ID = %d, Name = %s, Age = %d, Gender = %s\n”, id, name, age, gender);
}
sqlite3_finalize(stmt);
sqlite3_close(db);
在上面的示例中,我们使用SELECT语句从“students”表格中读取所有列的值。sqlite3_prepare_v2()函数准备SQL语句,并使用sqlite3_step()函数执行。在while循环中,我们使用sqlite3_column_int()和sqlite3_column_text()函数获取列的值,并将其显示在控制台中。
结论
在本文中,我们了解了如何使用C语言连接和读取SQLite数据库。SQLite是一种轻量级和便携式的关系型数据库管理系统,可以嵌入到各种应用程序中。使用SQLite,开发人员可以创建易于维护和读取的数据库。希望这篇文章能够帮助你更好地理解如何在C语言中使用SQLite。