- Linux下SQLite数据库的安装
- SQLite3基本命令
- SQLite3 C语言编程接口
- C语言实现sqlite数据库的增删改查
方法一:
SQLite官网下载。从源代码区下载 sqlite-autoconf-*.tar.gz
安装方法:
$ tar xvzf sqlite-autoconf-3071502.tar.gz $ cd sqlite-autoconf-3071502 $ ./configure --prefix=/usr/local $ make $ make install
方法二:
在线安装
$ sudo apt-get install sqlite3
命令行输入sqlite3出现,以下即为安装成功
1.系统命令——以“."开头的命令
.help:查看帮助
.quit:退出
.exit:退出
.schema:查看当前表的结构
.databases:查看数据库文件的详细信息
.table:查看当前数据库下的表格
2.sql命令——不以“."开头,但要以“;”结尾的命令
创建一张数据库表stu
create table stu(id Integer, name char, score Integer);
插入一条记录
insert into stu values(1001, 'zhangsan', 80);//全部字段插入
insert into stu (id, name)values(1003, 'wangwu'); //部分字段插入
查询表的记录
select * from stu; //查看表的全部字段记录
select name , score from stu; //查看表的部分字段记录
select * from stu where score=80;
select * from stu where score=80 and name='zhangsan';
select * from stu where score=80 or name='zhangsan';
删除一条记录
delete from stu ; //删除整张表
delete from stu where id=1001; //删除id=1001的记录
更新一条记录
update stu set name='wangwu' , score=88 where id=1003;
//把id=1003的记录的name改为wangwu,score改为88
插入一列
alter table stu add column address char;
删除若干列
sqlite3不支持删除列,要间接删除列
步骤1:创建一张新的表
create table stu1 as select id ,name, score from stu;
步骤2:删除原先的表
drop table stu;
步骤3:将新表的名字改成旧表的名字
alter table stu1 rename to stu;
1、打开数据库
int sqlite3_open(const char *filename, sqlite3 **ppDb);
filename:数据库文件路径名
ppDb :sqlite操作句柄(指针)
返回值:成功返回SQLITE_OK,失败返回错误码
2、关闭数据库
int sqlite3_close(sqlite3* db);
db:sqlite操作句柄(指针)
返回值:成功返回SQLITE_OK,失败返回错误码
3、得到数据库操作的错误信息
const char *sqlite3_errmsg(sqlite3* db);
返回值:错误信息的首地址
4、执行一条sql语句(使用回调函数)
int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback) (void*,int,char**,char**), void *arg, char **errmsg );
db:数据库操作句柄
sql:一条sql语句
callback:回调函数,只有sql语句为查询语句时,才会执行此语句
arg:给回调函数传参
errmsg:错误信息
int (callback)(void,int,char**,char**):查询到结果,是一个函数指针,传函数名即可
返回值:成功SQLITE_OK
callback回调函数
typedef int (*sqlite3_callback) (void *para, int f_num, char **f_value, cahr **f_name);
功能:每找到一条记录自动执行一次回调函数
para:传递给回调函数的参数
f_num:记录中包含的字段数目
f_value:包含每个字段的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1
5、执行一条sql语句(不使用回调函数)
ps:官网不推荐
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg);
db:数据库句柄
sql:一条SQL语句
resultp:查询结果结果的指针
nrow:结果行数
ncolumn:结果列数
errmsg:错误信息的指针的地址
返回值:成功返回0,失败返回错误码
#include#include #include #define DATEbase "stu.db" int do_insert(sqlite3 *db); //增 int do_delete(sqlite3 *db); //删 int do_query(sqlite3 *db); //查(使用回调函数) int do_query1(sqlite3 *db); //查(不使用回调函数) int do_update(sqlite3 *db); //改 int main(int argc, char **argv) { sqlite3 *db; char *errmsg; int cmd = 0; //1.open a sqlite if(sqlite3_open(DATEbase , &db) != SQLITE_OK){ printf("error:%sn", sqlite3_errmsg(db)); } else{ printf("open sqlite3 success.n"); } //2.create a new datebase table if(sqlite3_exec(db, "create table stu(id Integer, name char, score Integer);", NULL, NULL, &errmsg) != SQLITE_OK){ printf("error:%sn", errmsg); } else{ printf("create sqlite3 success.n"); } while(1){ printf("***********************************************n"); printf("1.insert 2.delete 3.query 4.update 5.quitn"); printf("***********************************************n"); printf("please input a number:"); scanf("%d", &cmd); getchar(); switch(cmd){ case 1: //增 do_insert(db); break; case 2: //删 do_delete(db); break; case 3: //查 //do_query(db); do_query1(db); break; case 4: //改 do_update(db); break; case 5: //退 sqlite3_close(db); exit(1); break; default: printf("cmd errorn"); break; } } return 0; } int do_insert(sqlite3 *db) { int id; char name[32]; int score; char sql[128] = {}; char *errmsg; printf("please input a id:"); scanf("%d", &id); getchar(); printf("please input a name:"); scanf("%s", name); getchar(); printf("please input a score:"); scanf("%d", &score); getchar(); sprintf(sql, "insert into stu values(%d, '%s', %d);", id, name, score); if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){ printf("insert error:%sn", errmsg); } else{ printf("insert success.n"); } return 0; } int do_delete(sqlite3 *db) { int id; char name[32]; int score; char sql[128] = {}; char *errmsg; printf("please input a id:"); scanf("%d", &id); getchar(); sprintf(sql, "delete from stu where id=%d;", id); if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){ printf("delete error:%sn", errmsg); } else{ printf("delete success.n"); } return 0; } int callback(void *para, int f_num, char **f_value, char **f_name) { int i = 0; for(i = 0; i < f_num; i++){ printf("%-11s", f_value[i]); } putchar(10); return 0; } int do_query(sqlite3* db) { char sql[128] = {}; char *errmsg; sprintf(sql, "select * from stu;"); if(sqlite3_exec(db, sql, callback, NULL, &errmsg) != SQLITE_OK){ printf("query error:%sn", errmsg); } else{ printf("query success.n"); } return 0; } int do_query1(sqlite3* db) { char sql[128] = {}; char *errmsg; char **resultp; int nrow; int ncolumn; int i, j; int index; sprintf(sql, "select * from stu;"); if(sqlite3_get_table(db, sql, &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK){ printf("query error:%sn", errmsg); } else{ printf("query success.n"); } for(i=0; i



