聊天服务器——sqlite3

数据库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官网下载地址:

[]: SQLite Download Page

先去官网上下载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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值