自己建立网站要钱吗,域名购买一般多少钱,商标设计找哪里,iis7发布php网站数据库
数据库是在数据库管理系统和控制之下#xff0c;存放在存储 介质上的数据集合。
基于嵌入式的数据库
基于嵌入式linux的数据库主要有SQlite#xff0c;
Firebird,Berkeley DB,eXtremeDB Firebird是关系型数据库#xff0c;功能强大#xff0c;支持存储过 程存放在存储 介质上的数据集合。
基于嵌入式的数据库
基于嵌入式linux的数据库主要有SQlite
Firebird,Berkeley DB,eXtremeDB Firebird是关系型数据库功能强大支持存储过 程SQL兼容等 SQlite关系型数据库体积小支持ACID事务 Berkeley DB中并没有数据库服务器的概念它的程 序直接链接到应用程序中 eXtremeDB是内存数据库运行效率高
SQlite基础
SQLite的源码是C语言其源代码完全开发SQLite
第一个Alpha版本诞生于2000年5月他是一个轻量 级的嵌入式数据库。
SQLite有以下特性 零配置无需安装和管理配置 存储在单一磁盘文件中的一个完整的数据库 数据库文件可以在不同字节顺序的机器间自由共享支持数据库大小至2TB
足够小全部源码大致三万行C代码250KB
比目前留下的大多数数据库对数据的操作更快
创建数据库
1.在线安装
sudo apt-get install sqlite3
2.本地安装
官网下载sqlite3然后本地安装sudo dpkg -i *.deb
3.SQlite3 基本命令
1.系统命令 以 . 开头的命令 .help 帮助 .quit 退出 .schema查看表结构 .databases 查看打开的数据库 .table 2.sql命令
基本的sql命令不以 . 开头但是都要 结尾
创建一张数据库的表 stucreate table stu(id Integer,name char,score Integer); 插入一张记录 insert into stu values(1001,zhangsan,80); 插入部分字段记录 insert into stu(name,score) values(1002,lisi); 查询所有记录 select *from stu
查询数据库部分内容字段 select name,score from stu 根据属性查询 select * from stu where score80; select *from stu where score80 and namezhangsan; 删除一条记录 delede from stu where id1003; delete from stu where socre90;
更新一条记录 update stu set namewangwu where id1001; update stu set namewangwu,score88 where id 1001;
添加一列 alter table stu add column address char;
删除一列
1.创建一张表 提取字段
create table stu1 as select id,name,score from stu;
2.删除原有表
drop table stu;
3.将新的表的名字改成原有的表名字
alter table stu1 rename to stu; SQlite编程接口
4.API操作
1.int sqlite3_open(char *filename,sqlite3 **db) 功能打开sqlite数据库 参数 filename:数据库文件路径 db:指向sqlite句柄的指针
返回值 成功返回0失败返回错误码非0值
2.int sqlite3_close(sqlite3 *db); 功能关闭sqlite数据库 参数 db 操作数据库的指针
返回值 成功返回0失败返回错误码
3.const char *sqlite3_errmsg(sqlite3 *db); 功能通过DB句柄得到数据库操作的错误信息
参数 db 操作数据库的指针 返回值 返回错误信息的首地址
4.int sqlite3_exec(const char *sql, int (*callback)(void *,int,char**,char *8) void *, char **errmsg); 功能执行一条sql语句
参数 db:数据库操作句柄 sql一条sql语句 sqlite3*db, callback回调函数只有sql为查询语句的时候 才会执行此语句 void * 给回调函数传递参数 errmsg:错误信息
返回值 成功SQLITE_OK
int (*callback)(void *,int,char**,char *8) 功能查询结果是一个函数指针类型传递一个函数名 回调函数接口
typedef int(*sqlite3_callback)( void *para, int f_num, char ** f_value, char ** f_name) 功能 每找到一条记录自动执行一次回调函数 para:传递给回调函数的参数 f_num:记录中包含的字段数目 f_value:包含每个字段值的指针数组 f_name:包含每个字段名称的指针数组
返回值 成功返回0失败返回-1
不使用回调函数执行SQL语句
int sqlite3_get_table( sqlite3 *db, const char *sql, char ***resultp,int *nrow, int *ncolumu,char **errmsg) 功能执行sql操作 db:数据库句柄 sql:sql语句 resultp:用来指向sql执行结果的指针 nrow:满足条件的记录的数目 ncolumn:每条记录包含的字段数目 errmsg:错误信息指针的地址
返回值 成功返回0失败返回错误码
#include stdio.h
#include stdlib.h
#include sqlite3.h // sqlite3_callback 类型的回调函数
int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i 0; iargc; i){ printf(%s %s\n, azColName[i], argv[i] ? argv[i] : NULL); } printf(\n); return 0;
} int main() { sqlite3 *db; char *err_msg 0; int rc; char **result; int row, column; // 打开数据库 rc sqlite3_open(test.db, db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; } // 使用 sqlite3_exec 和回调函数 rc sqlite3_exec(db, SELECT * FROM my_table, callback, 0, err_msg); if (rc ! SQLITE_OK ){ fprintf(stderr, SQL错误: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; } // 使用 sqlite3_get_table 获取结果 rc sqlite3_get_table(db, SELECT * FROM my_table, result, row, column, err_msg); if (rc ! SQLITE_OK) { fprintf(stderr, SQL错误: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; } // 输出 sqlite3_get_table 的结果 printf(sqlite3_get_table 结果:\n); for (int i 0; i row 1; i) { for (int j 0; j column; j) { printf(%s , result[i*column j] ? result[i*column j] : NULL); } printf(\n); } // 释放结果 sqlite3_free_table(result); // 关闭数据库 sqlite3_close(db); return 0;
}