阅读量:4
数据库Sqlite3
特点
1、体积小
2、支持window和Linux(包括Android),跨平台性很好
3、采用的一种库函数的形式来提供数据库的服务
4、文件性的数据库
5、缺点:不能使用网络,单纯就是本地数据库。加密性能不是很好,安全性不足
语法
插入:
INSERT INTO 表名(列名1,...)
VALUES(列1值,...)
修改:
UPDATE 表名
SET 列名1=列1值,...
WHERE[条件表达式]
删除:
DELETE FROM 表名
WHERE[条件表达式]
查询
SELECT 列名1,...FROM表名
WHERE[条件表达式];
`“ ’用来处理空格
创建
CREATE TABLE 库名.表名(
列1名 类型 特征(主键、唯一、非空、自增、注释),
...
);
删除表
DROP TABLE 表名;
接口函数
如果文件存在,则尝试打开
如果文件不存在,则创建
这个文件就是一个库
不支持多线程访问,不支持多实例访问
所以sqlite3没有create,因为open就是create
open完之后一定要记得close
SQLITE_API int sqlite3_open( const char* filename, //Database filename(UTF-8) sqlite3** ppDb //SQLite db handle ); SQLITE_API int sqlite3_open16( const void* filename; //Database filename(UTF-16) sqlite3** ppDb //SQLite db handle ) SQLITE_API int sqlite3_close(sqlite3*); SQLITE_API int sqlite3_exec( sqlite3*, //An open database const char* sql, //SQL to be evaluated int (*callback)(void*,int,char**,char**), //callback function void*, //1st argument to callback char** errmsg //Error msg written here ) SQLITE_API int sqlite3_prepare( sqlite3* db, const char* zSql, int nByte, sqlite3_stmt** ppStmt, const char** pzTail ) SQLITE_API int sqlite3_bind_blod SQLITE_API int sqlite3_bind_double SQLITE_API int sqlite3_bind_int SQLITE_API int sqlite3_bind_int64 SQLITE_API int sqlite3_bind_null SQLITE_API int sqlite3_bind_text SQLITE_API int sqlite3_bind_text16 SQLITE_API int sqlite3_bind_value SQLITE_API int sqlite3_bind_zeroblod SQLITE_API int sqlite3_step SQLITE_API int sqlite3_finalize
使用sqlite3_prepare函数可以将SQL语句编译成可执行的字节码,进而执行各种操作,例如查询数据、插入数据、更新数据、删除数据等。同时,由于SQLite是一种嵌入式数据库,所以可以在应用程序中直接使用sqlite3_prepare函数编译SQL语句,无需启动一个独立的数据库服务器进程。
数据库接口示例
sqlite3官网下载地址:
先去官网上下载sqlite3源码。
然后在vs上创建新项目,导入源码里的头文件和源文件
项目配置里,不使用预编译头
使用多字节字符集
创建库的示例
#include "sqlite3.h" #include <iostream> int main() { sqlite3* pdb = NULL; char* errMsg = NULL; int ret = sqlite3_open("edyun.db", &pdb); if (ret) { std::cout << sqlite3_errmsg(pdb) << std::endl; return -1; } else { std::cout << "open edoyun.db success!\r\n"; } const char* sql = "CREATE TABLE EDoYun (" \ "ID INT PRIMARY KEY NOT NULL, "\ "NAME TEXT NOT NULL);"; do { int ret = sqlite3_exec(pdb, sql, NULL, NULL, &errMsg); if (ret != SQLITE_OK) { std::cout << errMsg << std::endl; sqlite3_free(errMsg); } else { std::cout << "open edoyun.db success!\r\n"; } break; } while (false); sqlite3_close(pdb); //有open,那么必须要有close }
插入和查询
#include "sqlite3.h" #include <iostream> int callback(void*, int argc, char* argv[], char* name[]) { for (int i = 0; i < argc; i++) { std::cout << name[i] << " = " << argv[i] << std::endl; } return 0; } int main() { sqlite3* pdb = NULL; char* errMsg = NULL; int ret = sqlite3_open("edyun.db", &pdb); if (ret) { std::cout << sqlite3_errmsg(pdb) << std::endl; return -1; } else { std::cout << "open edoyun.db success!\r\n"; } const char* sql = "CREATE TABLE EDoYun (" \ "ID INT PRIMARY KEY NOT NULL, "\ "NAME TEXT NOT NULL);"; do { //创建表 int ret = sqlite3_exec(pdb, sql, NULL, NULL, &errMsg); if (ret != SQLITE_OK) { std::cout << errMsg << std::endl; sqlite3_free(errMsg); break; } else { std::cout << "open edoyun.db success!\r\n"; } //插入 sql = "INSERT INTO EDoYun (ID,NAME)VALUES(1,\"jueding\");"; ret = sqlite3_exec(pdb, sql, NULL, NULL, &errMsg); if (ret != SQLITE_OK) { std::cout << errMsg << std::endl; sqlite3_free(errMsg); break; } else { std::cout << "insert success!\r\n"; } sql = " SELECT * FROM EDoYun;"; ret = sqlite3_exec(pdb, sql, callback, NULL, &errMsg); if (ret != SQLITE_OK) { std::cout << errMsg << std::endl; sqlite3_free(errMsg); break; } else { std::cout << "query success!\r\n"; } } while (false); sqlite3_close(pdb); //有open,那么必须要有close }