Qt学习17——初识数据库SQLite(上)
来源:互联网 发布:java培训多少钱 编辑:程序博客网 时间:2024/06/06 06:47
SQLite的使用
摘要:主要是了解Qt中创建SQLite数据库的基本流程,使用QSqlQuery类和SQL基本语法实现创建简单数据库并添加数据。下一篇会介绍与Model/View配合更默契的QSqlTableModel和QSqlRelationalTableModel,这些高层接口将不依赖SQL语法实现数据库操作。
一、创建数据库
新建Qt工程,添加空的C++类文件(本文暂不使用ui)。在.pro文件中添加
QT += sql
这里默认创建的是SQLite,Qt默认搭载QSqlite驱动(包含了Sqlite数据库),所以这里不必使用
QSqlDatabase::drivers()
去查找系统中可用数据库驱动了。
新建方法bool ConnectDB(const QString &dbName),用于创建并配置一个数据库连接。
@sqliteconnection.cppbool SqlConnection::ConnectDB(const QString &dbName) { QSqlDatabase myDB = QSqlDatabase::addDatabase("QSQLITE");// myDB.setHostName("host");// myDB.setDatabaseName("dbname");// myDB.setUserName("username");// myDB.setPassword("password"); myDB.setDatabaseName(dbName); if (!myDB.open()) { QMessageBox::critical(0,QObject::tr("Database Error"),myDB.lastError().text()); qDebug()<<"my_db open error !"; return false; } return true;}
setDatabaseName()用于设置要连接的数据库名,同名链接新的会覆盖旧的。如果搭建数据库服务器,注释中可以对主机名、用户名等进行配置。open()用于打开数据库链接并返回bool值。lastError()用于输出最新错误。在main()中调用它:
@main.cpp#include "mainwindow.h"#include "sqlconnection.h"#include <QApplication>#include <QFile>int main(int argc, char *argv[]){ QApplication a(argc, argv); QFile file("demo.db"); if (file.exists()) file.remove();//用于测试时删除上一次创建的数据库 SqlConnection sql; sql.ConnectDB("demo.db")//建立名为"demo.db"的数据库连接// MainWindow w;// w.show(); return a.exec();}
此时已经可以创建一个数据库链接,在build-debug文件路径下可以看到demo.db文件。
二、添加数据库查询
要实现数据库查询,需要将QSqlQuery实例化。
@sqlconnection.cppbool SqlConnection::CreateDB() { QSqlQuery query; if (!query.exec("CREATE TABLE music (" "id INTEGER PRIMARY KEY AUTOINCREMENT," "title VARCHAR," "artist VARCHAR)")) { QMessageBox::critical(0,QObject::tr("Database Error"),query.lastError().text()); return 1; } return true;}
这里创建了一个数据库表music,包含title和artist两个属性,关键字”id”自动递增。
三、插入数据
@sqlconnection.cppbool SqlConnection::AddData() { QSqlQuery query; query.prepare("INSERT INTO music (title, artist) VALUES (?,?)"); QStringList titles; titles <<QString::fromLocal8Bit("小城故事")<< QString::fromLocal8Bit("她") << "Dapartures"; query.addBindValue(titles); QVariantList artists; artists<< QString::fromLocal8Bit("邓丽君") << QString::fromLocal8Bit("朱婧汐") << "EGOIST"; query.addBindValue(artists); if (!query.execBatch()) { QMessageBox::critical(0,QObject::tr("Database Error"),query.lastError().text()); } query.finish(); query.exec("SELECT title, artist FROM music"); while (query.next()) { QString title = query.value(0).toByteArray(); QString artist = query.value(1).toByteArray(); qDebug()<<title<<"|"<<artist; } return true;}
@main.cpp#include "mainwindow.h"#include "sqlconnection.h"#include <QApplication>#include <QFile>int main(int argc, char *argv[]){ QApplication a(argc, argv); QFile file("demo.db"); if (file.exists()) file.remove(); SqlConnection sql; if (sql.ConnectDB("demo.db")) { sql.CreateDB(); sql.AddData(); }// MainWindow w;// w.show(); return a.exec();}
运行结果:
三、中文问题
Sqlite默认是不支持中文的(截止目前版本为SQLite version 3.20.1),网上看了一圈方法很多,但是有的写的也很复杂。我这里给出一种能简便地实现中文输入的方法:
1、将包含中文的文件(.cpp、.h)用记事本打开,随便加个空格什么的修改一下,保存。
2、在使用中文的地方用QString::fromLocal8Bit(“中文”) 。
就可以实现将中文字符插入数据库了。
- Qt学习17——初识数据库SQLite(上)
- Qt学习17——初识数据库SQLite(中)
- Qt数据库(sqlite) — 总结
- Qt数据库(sqlite) — 总结
- SQLite学习3_Linux平台上SQLite数据库教程(一)——终端使用篇
- SQLite数据库(上)
- SQLite数据库(上)
- SQLite初识(一)创建数据库
- SQLite初识(二)数据库查询
- SQLite初识(三)数据库升级
- SQLite初识(四)数据库插入数据
- SQLite初识(五)修改数据库数据
- SQLite初识(六)删除数据库数据
- SQLite初识(八)数据库--查询数据
- 初识Sqlite数据库
- Android数据库SQLite-初识
- QT学习之路————C语言操作sqlite数据库
- QT学习5:数据库,sqlite相关
- hdu 5874 Friends and Enemies
- 创建虚拟机
- layui tab控件中载入外部html页面
- Android自定义控件
- 正式使用第一天
- Qt学习17——初识数据库SQLite(上)
- JDK7之Try-with-resources
- java中抽象类和接口的区别
- torch-luarocks在服务器安装软件
- UvaLive 5031 Graph and Queries(Treap+并查集)
- Android事件拦截机制分析
- JavaScript内存(相关)
- Android的ListView常用优化技巧
- Swoole-WebSocket-Chat 聊天室前后端demo