sqliteQt数据库操作

版权声明:若无来注明,Techie亮博客章都为原创。
转载请为链接形式表明本文标题和地方:
本文标题:Qt数据库操作     本文地址:http://techieliang.com/2017/11/335/

代码较多,建议原地方查看

文章目录

  • 1. 基本操作
  •  1.1. 连接
  •  1.2. 断开连接
  •  1.3. sql指令操作
  • 2. 其他
  •  2.1. 差不多数据库情况下QSqlQuery
    的运用
  •  2.2. Qt支持的数据库
  •  2.3.
    建议采取QSqlQuery及bindValue操作

  • 基本操作


1.1. 连接

  1. if(!QSqlDatabase::contains()) {
  2. QSqlDatabase database = QSqlDatabase::addDatabase(“QSQLITE”);//第二参数不提供名字,使用默认名称,第一单参数为数据库类型名
  3. database.setDatabaseName(m_db_file_name);//数据库名–sqlite是文件称,sqlite不用写下面的安排
  4. database.setHostName(“techieliang.com”);
    //数据库主机名
  5. database.setUserName(“user”);
    //数据库用户名
  6. database.setPassword(“******”);
    //数据库密码
  7. if(!database.open()) {
  8. qDebug()<<database.lastError();
  9. }
  10. }

留意addDatabase有少数只参数,第二独参数是用以受此连续命名的,若不命名则为默认名称。

默认名称也:qt_sql_default_connection

  1. static QSqlDatabase addDatabase(QSqlDriver*
    driver,
  2. const QString& connectionName = QLatin1String(defaultConnection));

1.2. 断开连接

虽然关闭程序以后默认会断开,不会见招致文件永远占用,但是建议数据库用完主动断开

  1. QSqlDatabase database = QSqlDatabase::database();//根据连年名称获取数据库,不填则为默认连接名
  2. database.close();

1.3. sql指令操作

简易一赖操作:

  1. const static QString
    mInsertCategorySql =
  2. “insert into category values (null,?)”;//增,name名字

一经起打增量,或其他非需要输入的字段,只待以对承诺位置输入null即可,注意不是字符串null

对此急需填的地方可以用?代替,后续可直接用addBindValue或者bindValue指令替换,按照?出现顺序替换

  1. bool SqlManager::InsertCategorySql(QString name) {
  2. QSqlQuery sql_query;//默认构造使用默认数据库
  3. sql_query.prepare(mInsertCategorySql);
  4. sql_query.addBindValue(name);
  5. if(!sql_query.exec()) {
  6. qDebug()
    << sql_query.lastError();
  7. return false;
  8. }
  9. return true;
  10. }

多字段:

  1. const static QString
    mInsertJournalSql =
  2. “insert into journal values
    (null,:catagory,:date,:value,:remark,:auditing)”;

使用”:XXXX”作为占位符,使用bindValue指令替换

只顾,只待让闹对许类型即可,Qt会活动进行更换,包括日期、时间全只有叫出Qt对许类型即可

于Sqlite中日期格式AAAA-BB-CC,也足以因字符串形式输入而用确保格式正确,不建议活动转移格式

  1. bool SqlManager::InsertJournalSql(int
    catagory_id,
  2. QDate date,
  3. float value,
  4. QString remark,
  5. bool auditing) {
  6. QSqlQuery sql_query;//默认构造使用默认数据库
  7. sql_query.prepare(mInsertJournalSql);
  8. sql_query.bindValue(“:catagory”,catagory_id);
  9. sql_query.bindValue(“:date”,date);
  10. sql_query.bindValue(“:value”,value);
  11. sql_query.bindValue(“:remark”,remark);
  12. sql_query.bindValue(“:auditing”,auditing);
  13. if(!sql_query.exec()) {
  14. qDebug()
    << sql_query.lastError();
  15. return false;
  16. }
  17. return true;
  18. }

发生返回值的操作:

  1. const static QString
    mSelectAllJournalSql =
  2. “select * from journal ORDER BY data DESC”;//查询所有

  3. struct JournalStruct {

  4. long long id;//分类id
  5. QString catagory;//分类
  6. QString date;//日期
  7. float value;//值
  8. QString remark;//备注
  9. };
  10. QList<JournalStruct> SqlManager::SelectUnauditJournalSql(bool is_all) {
  11. QSqlQuery sql_query;//默认构造使用默认数据库
  12. if(is_all)
  13. sql_query.prepare(mSelectAllJournalSql);
  14. else
  15. sql_query.prepare(mSelectUnauditJournalSql);
  16. QList<JournalStruct> s;
  17. if(!sql_query.exec()) {
  18. qDebug()
    << sql_query.lastError();
  19. return s;
  20. }
  21. else {
  22. //建立项目索引
  23. auto cates = SelectCategorySql();
  24. while(sql_query.next()) {
  25. s.append({sql_query.value(0).toLongLong(),
  26. sql_query.value(1).toInt(),
  27. sql_query.value(2).toString(),
  28. sql_query.value(3).toFloat(),
  29. sql_query.value(4).toString()});
  30. }
  31. return s;
  32. }
  33. }

瞩目:QSqlQuery
结果默认指于空,必须事先调整用同不成next()会对第一个结实值,通过.value(0)取对承诺字段值,通过toXXX转换为对应格式。

详见操作代码请见流水账记录软件→GitHub

2. 其他

2.1. 大多数据库情况下QSqlQuery 的动

上述所有操作,均运用了Qt默认名称数据库,故可以一直通过 QSqlQuery
XX构造实例。

要是指定了一定的数据库名称,或者出多个数据库需要运用

  1. QSqlQuery(QSqlDatabase db);

个中db可以下的函数获取

  1. static QSqlDatabase database(const
    QString& connectionName = QLatin1String(defaultConnection),
  2. bool open = true);
  3.  
  4. QSqlQuery query(QSqlDatabase::database(“connectionName”));

2.2. 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

上述数量获得自Qt帮助文档中QSqlDatabase的叙述,其中sqlite驱动默认集成,其余数据库需要设置相应驱动否则无法运用

至于让的切实可行说明请见:SQL Database
Drivers扶持文档

2.3. 建议下QSqlQuery及bindValue操作

匪建议采取qstring的arg()方法自行拼接字符串,使用bindValue可以有效之严防SQL注入。

同时是方可读性强,也针对针对特殊字符具有可以的支持性。

 

网站地图xml地图