初始化sqlite3 (创建表)
   QString url = QDir::currentPath() + QString::fromLocal8Bit("/Msg.db");
bool isExsiting = false;
QFileInfo file(url);
if (!file.absoluteDir().exists())
{
QDir dir;
dir.mkpath(file.path());
}
if (file.exists())
isExsiting = true;
if(SQLITE_OK != sqlite3_open(url.toStdString().c_str(), &m_conn))
{
sqlite3_close(m_conn);
}
if (!isExsiting)
{
char *zErrMsg= 0; char *sql= "CREATE TABLE [netmsg](\n [currentuser] [VARCHAR(50)],\n [msgType] int,\n [peername] [VARCHAR(40)],\n [peerNickname] [VARCHAR(40)],\n [msg] TEXT,\n [other_info] TEXT, [group_name] [VARCHAR(40)],\n [send_timestamp] TEXT, \n [bExtract] int);";
sqlite3_exec(m_conn, sql, 0, 0, &zErrMsg);
}
 
插入数据:
        sprintf_s(sql, 1024, "INSERT INTO [netmsg] VALUES('%s','%d','%s','%s','%s','%s','%s','%s','%d');",
m_user_name.c_str(),msg.msgType,msg.peername.c_str(),msg.peerNickname.c_str(),
msg.msg.c_str(),msg.other_info.c_str(),msg.group_name.c_str(),msg.send_timestamp.c_str(),flag);
m_rc = sqlite3_prepare_v2(m_conn, sql, strlen(sql), &m_stmt, 0);
if(m_rc != SQLITE_OK)
{
return;
} sqlite3_step(m_stmt);
sqlite3_finalize(m_stmt);

读取数据:

char    sql[1024];
sprintf_s(sql, 1024,
"SELECT * FROM [netmsg] WHERE [peername] == '%s' and [msgType] == '%d';"
,peerName.c_str(),PUSH_USER_CHAT_MESSAGE_); m_rc = sqlite3_prepare_v2(m_conn, sql, strlen(sql), &m_stmt, 0);
if(m_rc)
{
return;
} while(sqlite3_step(m_stmt) == SQLITE_ROW)
{
ComingMsg msg; msg.msgType = sqlite3_column_int(m_stmt, 1);
msg.peername = (char*)sqlite3_column_text(m_stmt, 2);
msg.peerNickname = (char*)sqlite3_column_text(m_stmt, 3);
msg.msg = (char*)sqlite3_column_text(m_stmt, 4);
msg.other_info = (char*)sqlite3_column_text(m_stmt, 5);
msg.send_timestamp = (char*)sqlite3_column_text(m_stmt, 7); if ( sqlite3_column_int(m_stmt, 8) == 0)
{
msg.bExtract = false;
}
else
{
msg.bExtract = true;
}
msgVec.push_back(msg);
} sqlite3_finalize(m_stmt);

删除数据:

        sprintf_s(sql, 1024, "DELETE FROM [netmsg] WHERE [peername] == '%s' and [msgType] == '%d';",
peerName.c_str(),PUSH_USER_CHAT_MESSAGE_); m_rc = sqlite3_prepare_v2(m_conn, sql, strlen(sql), &m_stmt, 0);
if(m_rc != SQLITE_OK)
{ return;
} sqlite3_step(m_stmt);
sqlite3_finalize(m_stmt);

sqlite3第一次用,简单地把自己的使用过程写一下,以后再用到可以参考。

sqlite3对很多通过的SQL语句都支持,像SELECT,UPDATE,INSERT,DELETE等等都支持地很好,只要懂SQL语句就可以用sqlite3。

By 冬狼无敌  转载请注明出处:http://blog.csdn.net/superzhaifd/article/details/13583507

												

sqlite3使用详解(Qt版本)的更多相关文章

  1. IOS数据库操作SQLite3使用详解(转)

    iPhone中支持通过sqlite3来访问iPhone本地的数据库.具体使用方法如下1:添加开发包libsqlite3.0.dylib首先是设置项目文件,在项目中添加iPhone版的sqlite3的数 ...

  2. 详解 QT 源码之 Qt 事件机制原理

    QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...

  3. svn冲突问题详解 SVN版本冲突解决详解

    svn冲突问题详解 SVN版本冲突解决详解 (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svn ...

  4. 详解 QT 主要类 QWidget

    QWidget类是所有用户界面对象的基类,每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分. 先来看内容. AD: 2013云计算架构师 ...

  5. 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)

    作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...

  6. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  7. Ngnix服务器详解(Windows版本)(非原创)

    文章大纲 一.Ngnix简介二.Ngnix安装三.Ngnix之静态资源访问四.Ngnix正向代理与反向代理五.Ngnix之虚拟主机配置六.Ngnix之负载均衡七.Ngnix之访问控制八.Ngnix日志 ...

  8. Hibernate注解----关联映射注解以及课程总结详解----图片版本

    上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...

  9. SQLite3使用详解

    sqlite常量的定义(SQLite3返回值的意思): SQLITE_OK           = 0;  返回成功 SQLITE_ERROR        = 1;  SQL错误或错误的数据库 SQ ...

随机推荐

  1. 优化笔记:jsyhjkzqxx_D_20140916.gz

    有几张表没有权限,所以跑不起来. 目测黄色部分比较坑爹,死了n多脑细胞才看懂,又死了n多脑细胞才改出来.对5034进行了2次扫描,并多次分组排序求和.(分组和排序算法相对来说比较耗性能) 改为只扫描一 ...

  2. MetaboAnalysis KEGG match methods

    1.KEGG regexdb.idmap.find({"name":{"$regex":"Prolyl-hydroxyproline",&q ...

  3. django之admin站点

    Admin站点 通过使用startproject创建的项目模版中,默认Admin被启用 1.创建管理员的用户名和密码 python manage.py createsuperuser 然后按提示填写用 ...

  4. angularjs之向下一个页面传参

    原理: 1.在a标签跳转时,连接后增加一个参数值 2.在路由中接收 3.在控制器中接收 实现: 1.<a href="#/list/{{val.id}}"> 2.在js ...

  5. HALCON中的算子大全(中英对照)

    HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...

  6. leetcode498

    public class Solution { public int[] FindDiagonalOrder(int[,] matrix) { ); ); + col - ; var ary = ne ...

  7. tornado 自定义session (一)

    tornado 中没有session功能,需要我们自己实现. 目录: settings: settings = { 'template_path': 'templates', 'static': 's ...

  8. 转 CentOS下面安装RVM+ruby+Rails

    CentOS6.2下面安装RVM+ruby+Rails (1)RVM官方网站应该是改版过一次, 使用 curl -L https://get.rvm.io | bash -s stable 下载并安装 ...

  9. \\IP\e$方式访问服务器的E盘被拒绝是什么原因?

    问题:服务器本地管理员的权限,首先访问是被拒绝而不是报用户名密码错误:其次远程桌面服务器是可以访问我个人点的D.E盘的 打开默认共享方法:先在控制面板的“服务”,看SERVER服务是否启动,如果没有启 ...

  10. 【转】tcp_tw_recycle和tcp_timestamps导致connect失败问题

    (2012-02-01 18:40:32)     近来线上陆续出现了一些connect失败的问题,经过分析试验,最终确认和proc参数tcp_tw_recycle/tcp_timestamps相关: ...