SQLite数据操作

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,SQLite引擎不是个程序与之通讯的独立进程,而是连接到程序中成为它的一个主要部分,其主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有着积极的作用。
1.Qt操作SQLite数据库
Qt提供了与平台以及数据库种类无关的访问数据库接口,支持类型和描述分别有:
Driver Type Description
QDB2 IBM DB2
QIBASE Borland InterBase Driver
QMYSQL MySQL Driver
QOCI Oracle Call Interface Driver
QODBC ODBC Driver (includes Microsoft SQL Server)
QPSQL PostgreSQL Driver
QSQLITE SQLite version 3 or above
QSQLITE2 SQLite version 2
QTDS Sybase Adaptive Server
涉及操作注意点:
<1>.创建Qt项目,数据库放置与工程同一个目录下,添加头文件【include <QtSql>】,Qt工程文件(xxx.pro)添加涉及库【QT +=sql】;
<2>.SQLite数据库主要操作
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //声明数据库类型
db.setDatabaseName("demo.db"); //关联数据库
db.open(); //连接打开数据库【只有通过open激活到数据库的物理连接,否则不可用】
QSqlQuery sqlQuery(db); //数据库操作
sqlQuery.exec("select * from 数据表"); //通过exec执行sql相关操作
db.close(); //用完,关闭数据库
<3>.简单例子
#include <QtCore/QCoreApplication>
#include <QtSql>
#include <qDebug>

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName((char *)"demo.db");
    //db.setUserName("用户名");
    //db.setPassword("密码");
    if(!db.open())
    {
        //连接数据库失败
        return -1;
    }

QSqlQuery sqlQuery;
    //插入数据
    sqlQuery.prepare("insert into employee(id, name, salary) values(:id, :name, :salary)");
    bool bInsert = sqlQuery.exec("insert into employee(id, name, salary) values(1001, ‘张三‘, 6500)";
    //sqlQuery.bindValue(":id", 1001);
    //sqlQuery.bindValue(":name", "张三");
    //sqlQuery.bindValue(":salary", "6500");
    //bool bInsert = sqlQuery.exec();
    if (!bInsert)
    {
        //插入数据失败
    }

//查询数据
    sqlQuery.exec("select * from employee");
    while (sqlQuery.next())
    {
        int id = sqlQuery.value(0).toInt();
        QString name = sqlQuery.value(1).toString();
        QString salary = sqlQuery.value(2).toString();
        //获取相关数据处理
    }

//更新数据
    sqlQuery.exec("update employee set salary= \"7000\" where id=\"1001\"");

app.exec();
    return 0;
}

2.C/C++接口操作SQLite数据库
SQLite本身提供了对应的API函数接口供C/C++程序调用,主要有:sqlite3_open(),sqlite3_exec()和sqlite3_close()。
<1>.核心对象
SQLite中主要的核心对象分别为:database_connection和prepared_statement
database_connection对象是由sqlite3_open()接口函数创建并返回的,在应用程序使用任何其他SQLite接口函数之前,必须先调用该函数以便获得database_connnection对象,在随后的其他调用中,都需要该对象作为输入参数以完成相应的工作;
prepare_statement可以把它视为编译后的SQL语句,作为涉及操作调用接口参数;

<2>.核心接口
sqlite3_open是操作SQLite数据库的入口函数,该函数返回database_connection对象,作为句柄参数供其他接口调用;

sqlite3_prepare将相关的SQL语句转换为prepared_statement对象,并在函数执行后返回对象指针,相当于一种操作初始化准备;

sqlite3_step用于评估sqlite3_prepare函数返回的prepared_statement对象,执行完将对象内部指针指向结果的数据行首,对于insert/update/delete等dml语句,该函数只需执行一次,其他需要访问其他数据行,需重复调用;

sqlite3_column获取当前行指定列的数据,由相关的接口完成该功能:
sqlite3_column_blob
sqlite3_column_bytes
sqlite3_column_bytes16
sqlite3_column_double
sqlite3_column_int
sqlite3_column_int64
sqlite3_column_text
sqlite3_column_text16
sqlite3_column_type
sqlite3_column_value
sqlite3_column_count
其中sqlite3_column_count函数用于获取当前结果集中的字段数据;

sqlite3_finalize用于销毁prepared statement对象,避免内存泄露;

sqlite3_close用于关闭之前打开的database_connection对象;

<3>.简单例子
#include <stdio.h>
#include <sqlite3.h>
int main()
{
    int iRet;
    sqlite3 *db=NULL;
    iRet = sqlite3_open("demo.db", &db)
    if (SQLITE_OK != iRet)
    {
        //打开数据库失败
        return -1;
    }

char *ErrMsg;
    //sqlite3_exec:参数1(数据库指针)/参数2(sql语句)/参数3(回调函数)/参数4(回调函数参数)/参数5(返回错误信息)
    iRet = sqlite3_exec(db, "insert into employee(id, name, salary) values(1001,\"张三\",\"6500\")", NULL, NULL, &ErrMsg);
    if (SQLITE_OK != iRet)
    {
        //插入数据失败
    }

//int sqlite3_prepare(
    // sqlite3 *db,                        /* Database handle */
    // const char *zSql,                /* SQL statement, UTF-8 encoded */
    // int nByte,                          /* Maximum length of zSql in bytes. */
    // sqlite3_stmt **ppStmt,      /* OUT: Statement handle */
    // const char **pzTail             /* OUT: Pointer to unused portion of zSql */
    // );
    sqlite3_stmt *ppStmt;
    iRet = sqlite3_prepare(db,"select id,name,salary from employee", -1, &ppStmt, NULL);
    if (SQLITE_OK != iRet)
    {
        //读取数据失败
    }
    else
    {
        while(sqlite3_step(ppStmt) == SQLITE_ROW)
        {
            printf("id: %s\t", sqlite3_column_text(ppStmt, 0));
            printf("name: %s\t", sqlite3_column_text(ppStmt, 1));
            printf("salary: %s\n", sqlite3_column_text(ppStmt, 2));
        }
        sqlite3_finalize(ppStmt);
    }

sqlite3_close(db);
    return 0;
}

时间: 2024-10-02 02:52:25

SQLite数据操作的相关文章

Java使用jdbc连接Sqlite数据库进行各种数据操作的详细过程

前言:      SQLite是遵守ACID 的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.       不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接API调用.这在消耗总量.延迟时间和整体简单性上有积极的作用.整个数据库(定义.表.索引和数据本身)都在宿主主机上存储在一个单一的文件中.它的简单的设计是通过在开始一个事务的时候锁定整个数

数据存储——SQLite语句之DML 数据操作语言和内置函数之聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

数据存储——SQLite数据库存储——SQL语句——DML数据操作语言、内置函数聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

安卓SQLite数据库操作,半小时开发新闻管理系统,纯干货

本教程致力于可以快速的学习安卓软件开发,希望能通过一系列自己手写的教程,帮助正在学习或想要学习安卓开发的同仁. 本教程由今日头条-全栈攻城狮号首发,都是一个字一个字码的.请尊重劳动成果,转载请注明出处. 更多文章请关注:做全栈攻城狮.写代码也要读书,爱全栈,更爱生活.请不要吝啬您的手指,关注我吧.关注有惊喜哦. 安卓开发系列文章目录请查看:http://www.chengxiaoxiao.com/bozhu/1336.html 上篇文章:安卓项目-利用Sqlite数据库,开发新闻发布系统讲解了S

UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软推荐使用Sqlite吧! 2,简单!就只有一个类库没有多余的参照什么的.不像其他数据库还得做复杂配置什么的麻烦! 3,不需要数据库服务,数据服务和客户都在同一个进程里面.如下图: 4,作为存储系统它只支持一个用户一个数据实体. 5,跨平台跨结构,这个好! Sqlite主要使用内容 如果想充分使用好S

Android Sqlite的操作

1.写一个类继承SQLiteOpenHelper public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { super(context, Const.DB_DBNAME , null, Const.DB_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteData

iOS 中SQLite数据库操作

在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 demo 具体过程: 1.创建名为 SQLite_Manage 的.h .m 文件,导入头文件 <sqlite3.h> 2.数据库在一个app中只有一个,使用单例模式:(代码如下) 1 + (SQLite_Manager *)sharedManager{ 2 static SQLite_Mana

SQLite CRUD操作

SQLite CRUD操作代码实例: 1:首先创建一个继承了SQLiteOpenHelper类的MyDatabaseHelper类.实现他的onCreate(SQLiteDatabase db) onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法. package dataBase.databasetest; import android.content.Context; import android.database.s

C# 与 SQLite的操作

1.通过Add References引用SQLite ADO .NET安装目录的bin目录下的System.Data.SQLite.DLL. 2.创建数据库文件:因为始终是个0字节文件,应该利用IO也可以(?!). System.Data.SQLite.SQLiteConnection.CreateFile(datasource);3.连接数据库 System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteCon