`

C++访问sqlite3的初体验

    博客分类:
  • C++
阅读更多
Sqlite确实是一个比较好的本地数据库,从接触它的时候就喜欢上了它,它可以在很多情况下简化应用。不过以前都是在Java里面使用,或者Linux C下使用的,现在有个项目(C++)可能我会用到sqlite做数据持久化,所以先热热身。

第一步:下载相关文件
首先到这里下载sqlite-source-3_6_12.zipsqlite-3_6_12.zipsqlitedll-3_6_12.zip三个包,并分别解压。

第二步:生成SQLite的lib文件
cmd进入命令行后输入: LIB /DEF:SQLITE3.DEF /MACHINE:IX86
如果找不到命令LIB,则需要将Microsoft Visual Studio\VC98\Bin这个目录添加到环境变量里。这样就生成了sqlite3.lib文件,我们在后面需要用到这个库,用于链接win32程序

第三步:编写测试工程
新建项目,将sqlite3.h(在源码包里)、sqlite3.dll、sqlite3.lib设置到工程环境里,或者直接拷贝到工程目录下。
然后我们将cmd切换到sqlite3的目录下,里面有个sqlite3.exe。执行命令:
> sqlite3 D:\sql.db   ;生成sql.db的数据库文件
sqlite3 > create table test_tab (f1 int, f2 long);
sqlite3 > .q

这样我们就生成了一张test_tab的表。
然后编写如下代码:
#include "sqlite3.h"
#include <iostream>
#include <sstream>

using namespace std;
sqlite3 * pDB;
int createTable()
{
    char* errMsg;
    std::string dropTab = "drop table test_tab;";
    string strSQL= "create table test_tab (f1 int, f2 long);";
 
    int res= sqlite3_exec(pDB , dropTab.c_str() , 0 , 0 , &errMsg);
 
    if (res != SQLITE_OK)
    {
        std::cout << "执行SQL 出错." << errMsg << std::endl;
        return -1;
    }
    res = sqlite3_exec(pDB , strSQL.c_str() ,0 ,0, &errMsg);
 
    if (res != SQLITE_OK)
    {
        std::cout << "执行创建table的SQL 出错." << errMsg << std::endl;
        return -1;
    }
    else
    {
        std::cout << "创建table的SQL成功执行."<< std::endl;
    }
 
    return 0;
}
 
int insert1()
{
    char* errMsg;
 
    int res = sqlite3_exec(pDB,"begin transaction;",0,0, &errMsg);
 
    for (int i= 1; i < 10; ++i)
    {
        std::stringstream strsql;
        strsql << "insert into test_tab  values(";
        strsql  << i << ","<< (i+10) << ");";
        std::string str = strsql.str();
        res = sqlite3_exec(pDB,str.c_str(),0,0, &errMsg);
        if (res != SQLITE_OK)
        {
            std::cout << "执行SQL 出错." << errMsg << std::endl;
            return -1;
        }
    }
 
    res = sqlite3_exec(pDB,"commit transaction;",0,0, &errMsg);
 
    std::cout << "SQL成功执行."<< std::endl;
 
 
    return 0;
}
 
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
   
    for(int i = 0 ; i < argc ; i++)
    {
        std::cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << ", " ;
    }
 
    std::cout<< "\n";
    return 0;
}
 
int select1()
{
    char* errMsg;
    string strSQL= "select * from test_tab;";
 
    int res = sqlite3_exec(pDB, strSQL.c_str(), callback , 0 , &errMsg);
 
    if (res != SQLITE_OK)
    {
        std::cout << "执行SQL 出错." << errMsg << std::endl;
        return -1;
    }
    else
    {
        std::cout << "SQL成功执行."<< std::endl;
    }
 
    return 0;
}
 
int main()
{
    int res = sqlite3_open("D:\\sql.db", &pDB);
 
    if( res ){
        std::cout << "Can't open database: "<< sqlite3_errmsg(pDB);
        sqlite3_close(pDB);
        return -1;
    }
    res = createTable();
    if (res != 0)
    {
        return 0;
    }
    res = insert1();
    if (res != 0)
    {
        return 0;
    }
    select1();

    return 0;
}

编译、链接、执行,看看效果吧。
SQLite不愧是数据存储的 "瑞士军刀".不像使用某些数据库,要配置ODBC,还要把一大堆的dll一起打包到最终的用户程序中去.还得使用depends之类的工具看要打包哪些.dll.
更多学习参看sqlite提供的document啦```
1
0
分享到:
评论

相关推荐

    ASqlite3Components.rar

    ASqlite3Components是一款专为Delphi和C++Builder开发者设计的SQLite3数据库接口组件,它将SQLite3的核心功能封装到了一个自包含的组件中,无需依赖外部的sqlite3.dll动态链接库。这一特性使得在部署应用程序时更加...

    sqlite3使用详解

    无论是在Windows、Unix还是其他操作系统上,只要遵循标准C或C++编程规范,就能够顺利地集成SQLite3,享受其带来的便捷与高效。 最后,随着技术的不断进步,SQLite3也在持续演进。开发者应定期关注其官方网站,了解...

    SQLite odbc驱动-x86(x64)

    SQLite ODBC驱动程序是...总的来说,SQLite ODBC驱动为开发者和用户提供了灵活且方便的方式来访问SQLite数据库,不论其操作系统是32位还是64位,都可通过标准化的ODBC接口进行数据交互,从而提升了开发效率和用户体验。

    windows下sqlite安装使用和性能优化及设置

    1. **下载 SQLite**:访问官方下载页面,下载适用于 Windows 的最新版本,例如 sqlite-3_5_1.zip。 2. **解压文件**:将下载的压缩包解压到指定目录,如 C:\sqlite。 3. **配置环境**:在解压后的目录中,你会看到 ...

    SQLite3 API 编程手册

    在C++代码中,由于C++和C的内存管理方式不同,你需要使用`extern "C"`来确保C语言编写的SQLite3库在C++环境中能够正常工作。例如: ```cpp extern "C" { #include "./sqlite3.h" } ``` 接下来是SQLITE操作入门。...

    XE5 SQLite Demo

    4. **内容提供者(Content Provider)**:虽然不是必需的,但在Android中,如果你想让其他应用能访问你的SQLite数据库,可以使用Content Provider。这允许数据共享,并遵循Android的安全模型。 5. **数据库的事务处理...

    Sqlite数据库编辑工具

    3. **跨平台**: SQLite具有良好的跨平台兼容性,可以在多种编程语言中使用,如C、C++、Python、Java、PHP等。 4. **小巧高效**: SQLite的体积小,但性能出色,适合于嵌入式设备和移动应用。 5. **丰富的SQL支持**:...

    读取xml转存sqlite

    在提供的标签中,`utf-8`和`unicode`都是关于字符编码的,`sqlite`表明了数据库的选择,而`vc2010`可能意味着在Windows下使用Visual C++ 2010进行开发。在Windows环境中,可能需要处理系统默认编码与项目编码的兼容...

    sqljs是SQLite数据库的一个JavaScript移植

    4. 数据操作:通过`sqlite3_prepare_v2`预编译SQL语句,然后通过`sqlite3_step`和`sqlite3_bind`进行数据操作,最后使用`sqlite3_finalize`释放资源。 5. 保存和恢复:为了在不同会话间保持数据,你需要将数据库...

    Qt 模拟键盘 sqlite 和数组模式

    本项目结合了 `Qt` 的图形界面能力,构建了一个模拟键盘,并引入了数组模式和 `sqlite` 数据库功能,以提升用户体验和数据管理。 **1. Qt 虚拟键盘** `Qt` 提供了一系列的组件和工具来创建用户界面,其中 `QWidget...

    基于c++的捕鱼达人小游戏

    总的来说,"基于C++的捕鱼达人小游戏"是一个结合了Qt5图形界面、SQLite3数据库管理和C++编程技术的项目,展现了开发者在游戏开发方面的技能。尽管目前仍有改进空间,但已经具备了基本的游戏流程和互动元素,为未来的...

    MFC CListCtrl虚表读取Sqlite数据

    在IT领域,尤其是在Windows开发中,MFC(Microsoft Foundation Classes)是一个非常重要的库,它为C++程序员提供了构建Windows应用程序的框架。CListCtrl是MFC中的一个控件,用于显示列表视图,通常用于展示表格或...

    C++人事管理系统源代码.zip

    - **SQL连接**:通常人事管理系统会连接到数据库存储信息,如MySQL或SQLite,需要了解SQL语句和相应的C++库如MySQL Connector/C++或SQLite3 API。 - **CRUD操作**:创建(Create)、读取(Read)、更新(Update)...

    C++学籍管理系统

    C++可以利用如SQLite、MySQL等数据库API进行连接和操作。例如,通过SQL语句实现对学生信息的增删改查,确保数据的持久化存储。 四、主要功能模块 1. 学生信息管理:包括添加、删除、修改和查询学生的基本信息,如...

    C++水电管理系统(源代码)

    3. **数据库连接**:为了持久保存数据,系统需要连接到数据库,如MySQL或SQLite,用于存储用户账户和水电使用记录。 二、核心功能实现 1. **用户管理**:用户注册、登录功能,支持密码加密存储,确保用户信息安全...

    C++编写的图书管理系统以及实习报告

    《C++编写的图书管理系统及实习报告》是一个典型的软件工程实践项目,主要涵盖了数据库管理和C++编程技术。在这个系统中,C++作为后端的主要开发语言,用于实现系统的功能逻辑,而图书管理则是具体的应用场景,涉及...

    学生成绩管理系统 网络版 C++实现

    这个系统的主要目的是为了高效地管理和处理学生的成绩数据,它允许用户通过网络进行数据交互,提高了信息的共享和访问效率。以下是这个系统的核心知识点: 1. **C++编程**:C++是一种强大的、面向对象的编程语言,...

    c++图书馆管理

    C++可以与SQL数据库进行交互,如MySQL或SQLite,通过ODBC或API实现数据存取。在系统中,我们需要设计合适的数据结构来存储书籍信息(如书名、作者、出版社、出版年份等)和用户信息(如姓名、联系方式、借阅权限等)...

    c++可视化学生选课系统

    常见的数据库管理系统如MySQL、SQLite等可以被集成到C++程序中。开发者使用SQL语句来操作数据库,实现数据的增删改查。为了保证数据的一致性,还可能应用事务处理机制,确保在并发环境下数据的正确性。 四、学生端...

Global site tag (gtag.js) - Google Analytics