📅  最后修改于: 2023-12-03 15:36:35.332000             🧑  作者: Mango
SQLite是一种嵌入式关系型数据库,它支持 SQL 语句和事务。SQLite的特点是轻量级、可嵌入、可移植、易于使用和高效。使用C/C++和SQLite的SQL可以在嵌入式设备和移动设备上开发本地应用程序,而无需使用独立的数据库服务器。
在使用SQLite之前,需要先安装SQLite库。SQLite的官方网站提供了预编译的二进制文件和源代码。安装SQLite的方法不同于不同的平台,可以访问 SQLite 的官方网站 查看如何在你的平台上安装SQLite。
使用 SQLite 时,首先需要创建一个数据库。在SQLite中,数据库是一个文件,可以通过文件系统中的路径来识别。可以使用SQLite提供的命令行工具或API来访问数据库。
可以使用SQLite提供的命令行工具或API创建数据库。在命令行中,使用以下命令来创建数据库:
sqlite3 test.db
这将创建一个名为test.db的数据库文件。在C/C++中,可以使用以下代码来创建数据库:
#include <sqlite3.h>
sqlite3 *db;
int rc = sqlite3_open("test.db", &db);
if(rc){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
fprintf(stdout, "Opened database successfully\n");
sqlite3_close(db);
return 0;
}
在SQLite中,表是存储数据的对象。可以使用SQL语句来创建表。以下是创建一个名为employee的表的SQL语句:
CREATE TABLE employee(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
在C/C++中,可以使用以下代码来创建表:
sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "CREATE TABLE employee(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);",-1,&stmt,0);
if(rc != SQLITE_OK){
fprintf(stderr, "create table failed:%s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
rc = sqlite3_step(stmt);
if(rc != SQLITE_DONE){
fprintf(stderr, "create table failed:%s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
fprintf(stdout, "Create table employee successfully\n");
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
}
可以使用SQL语句来向表中插入数据。以下是向employee表中插入一条记录的SQL语句:
INSERT INTO employee (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'John Smith', 25, 'New York', 5000.00 );
在C/C++中,可以使用以下代码来插入数据:
sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "INSERT INTO employee (ID,NAME,AGE,ADDRESS,SALARY) VALUES (?,?,?,?,?);",-1,&stmt,0);
if(rc != SQLITE_OK){
fprintf(stderr, "insert data failed:%s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
rc = sqlite3_bind_int(stmt,1,1);
rc = sqlite3_bind_text(stmt,2,"John Smith",-1,SQLITE_STATIC);
rc = sqlite3_bind_int(stmt,3,25);
rc = sqlite3_bind_text(stmt,4,"New York",-1,SQLITE_STATIC);
rc = sqlite3_bind_double(stmt,5,5000.00);
if(rc != SQLITE_OK){
fprintf(stderr, "insert data failed:%s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
rc = sqlite3_step(stmt);
if(rc != SQLITE_DONE){
fprintf(stderr, "insert data failed:%s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
fprintf(stdout, "Insert data successfully\n");
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
}
}
可以使用SQL语句来从表中查询数据。以下是从employee表中查询所有记录的SQL语句:
SELECT * FROM employee;
在C/C++中,可以使用以下代码来查询数据:
sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "SELECT * FROM employee;",-1,&stmt,0);
if(rc != SQLITE_OK){
fprintf(stderr, "select data failed:%s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
} else {
int cols = sqlite3_column_count(stmt);
while(sqlite3_step(stmt) == SQLITE_ROW){
for(int i = 0; i < cols; i++){
fprintf(stderr, "%s = ", sqlite3_column_name(stmt,i));
switch(sqlite3_column_type(stmt,i)){
case SQLITE_INTEGER:
fprintf(stderr, "%d", sqlite3_column_int(stmt,i));
break;
case SQLITE_FLOAT:
fprintf(stderr, "%.2f", sqlite3_column_double(stmt,i));
break;
case SQLITE_TEXT:
fprintf(stderr, "%s", sqlite3_column_text(stmt,i));
break;
case SQLITE_BLOB:
fprintf(stderr, "%d", sqlite3_column_bytes(stmt, i));
break;
case SQLITE_NULL:
fprintf(stderr, "%s", "NULL");
break;
}
fprintf(stderr, " | ");
}
fprintf(stderr, "\n");
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
使用C/C++和SQLite的SQL可以在嵌入式设备和移动设备上开发高效的本地应用程序。我们可以使用SQLite提供的命令行工具或API来访问数据库,使用SQL语句来创建表、插入数据、查询数据等。SQLite是一种轻量级、可嵌入、可移植、易于使用和高效的嵌入式关系型数据库,是开发本地应用程序的一个不错选择。