sqlite3使用详解(Qt版本)
初始化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版本)的更多相关文章
- IOS数据库操作SQLite3使用详解(转)
iPhone中支持通过sqlite3来访问iPhone本地的数据库.具体使用方法如下1:添加开发包libsqlite3.0.dylib首先是设置项目文件,在项目中添加iPhone版的sqlite3的数 ...
- 详解 QT 源码之 Qt 事件机制原理
QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...
- svn冲突问题详解 SVN版本冲突解决详解
svn冲突问题详解 SVN版本冲突解决详解 (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svn ...
- 详解 QT 主要类 QWidget
QWidget类是所有用户界面对象的基类,每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分. 先来看内容. AD: 2013云计算架构师 ...
- 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)
作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- Ngnix服务器详解(Windows版本)(非原创)
文章大纲 一.Ngnix简介二.Ngnix安装三.Ngnix之静态资源访问四.Ngnix正向代理与反向代理五.Ngnix之虚拟主机配置六.Ngnix之负载均衡七.Ngnix之访问控制八.Ngnix日志 ...
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...
- SQLite3使用详解
sqlite常量的定义(SQLite3返回值的意思): SQLITE_OK = 0; 返回成功 SQLITE_ERROR = 1; SQL错误或错误的数据库 SQ ...
随机推荐
- 一些通用的触发移动App崩溃的测试场景
一些通用的触发移动App崩溃的测试场景,如下: 1 验证在有不同的屏幕分辨率,操作系统和运营商的多个设备上的App行为. 2 用新发布的操作系统版本验证App的行为. 3 验证在如隧道,电梯等网络质量 ...
- 基于 DirectX11 的 MMDViewer 03-渲染管线
准备工作: 开始搭建框架之前,你需要确保已经进行了 D3D 开发环境的搭建,相关教程可以阅读这篇文章.不了解 DirectX11 的人,这个作者有关 DirectX11 的教程最好阅读一下,虽然文章不 ...
- effective javascript 学习心得
第2条:理解JavaScript的浮点数 1.js数字只有一种类型 2.见代码 /** * Created by Administrator on 2017/7/2. */ console.log(& ...
- 通过Curl 对url进行encode操作
最近做项目的时候,通过 Gflags Reload 时候 发现对于某些value中包含=%中文等字符的支持不够好,value被截断了. 经过分析后,发现程序对url切分是用=&为标准的,如果v ...
- Elasticsearch-PHP 快速开始
快速开始 本章节会给你一个客户端的主要功能(函数)是如何工作的快速概述. 安装 引入(包含)elasticsearch-php 在你的 composer.json 文件: { "requir ...
- Android基础之sqlite 数据库简单操作
尽管很简单,但是也存下来,以后直接粘过去就能用了. public class DBHelper extends SQLiteOpenHelper { private static final ...
- Python基础:字符串的常见操作
# 切片 # 切片 获取对象中一部分数据 [起始位置:结束位置(不包含):步长] qpstr = "山东张学友" result = qpstr[1: 3: 1] # 东张 prin ...
- unity3d 事件说明
Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. Awake ...
- 各种mac软件地址
http://www.sdifenzhou.com/ 各种软件地址
- cocos2dx 触摸屏的使用
只要继承与CCLayer的类都可以实现触摸功能.CCLayer类的触摸事件的一些接口如下: // 单点触碰 virtual bool ccTouchBegan(CCTouch *pTouch, CCE ...