C++QT SqlLite数据库简单使用


前言

C++QT SqlLite数据库简单使用


一、数据库简单使用

语言:C++
框架:Qt
数据库:Sqllite
设计模式:单例

二、代码

//Database.h
#pragma once

#include <QObject>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
#include <QMutex>
#include <QDir>
#include <QCoreApplication>
#include <QDate>
#include <QDateTime>

struct InfoEquipPatient
{
  QString Hospital;
  QString Doctor;
  QString PatientId;
  QString PatientName;
  QString PatientSex;
  QString PatientAge;
  QString Disease;
  QString Location;
  QString Time;
  QString CodeEquip;
};

class Database : public QObject
{
  Q_OBJECT
public:
  static Database* instance()
  {
	static QMutex mutex;
	if (!m_instance)
	{
	  QMutexLocker locker(&mutex);
	  if (!m_instance)
	  {
		m_instance = new Database();
	  }
	}
	return m_instance;
  }
  static void destroy()
  {
	if (m_instance)
	  delete m_instance;
  }

  explicit Database(QObject *parent = 0);
  ~Database();

  //建立数据库连接
  bool CreateConnect();
  //关闭连接
  void CloseConnect();
  //创建表
  void CreateTable();

  //获取所有设备手术信息
  void GetAllInfoEquips(QVector<InfoEquipPatient> &infos);
  
  QSqlDatabase m_dbconn;
private:
  static Database* m_instance;
};

//Database.cpp

#include "Database.h"

Database *Database::m_instance = 0;

Database::Database(QObject *parent)
  : QObject(parent)
{

}

Database::~Database()
{

}

bool Database::CreateConnect()
{
  m_dbconn = QSqlDatabase::addDatabase("QSQLITE", "MyConnect");
  QString fullpath = "spine.db";//数据库文件在debug/release根目录下,一般会自己创建
  m_dbconn.setDatabaseName(fullpath);

  //数据库登录用户名和密码设置
  m_dbconn.setUserName("root");
  m_dbconn.setPassword("123456");

  if (!m_dbconn.open())
  {
	qDebug() << "Database::CreateConnect()::failed connect.";
	return false;
  }
  else
  {
	qDebug() << "Database::CreateConnect()::success connect.";
	CreateTable();
	return true;
  }
}

void Database::CloseConnect()
{
  m_dbconn.close();
}

void Database::CreateTable()
{
  QSqlQuery query(this->m_dbconn);
  QString str_SqlEquipInfo = "CREATE TABLE InfoEquip(Hospital varchar(1024),Doctor varchar(1024),PatientId varchar(1024),PatientName varchar(1024),PatientSex varchar(10),PatientAge varchar(10),Disease varchar(1024),Location varchar(100),Time varchar(100),EquipCode varchar(100));";

  if (query.exec(str_SqlEquipInfo))
  {
	qDebug() << "Database::::Create Tables successful!";
  }
  else
  {
	qDebug() << "Database::::Tables Exist!";
  }
}

void Database::GetAllInfoEquips(QVector<InfoEquipPatient> &infos)
{
  QSqlQuery query(this->m_dbconn);
  QString str_SqlSelectAll = "select * from InfoEquip";
  query.prepare(str_SqlSelectAll);
  if (!query.exec())
  {
	qDebug() << query.lastError();
  }
  else
  {
	qDebug() << "Database::get_all_infoEquips!";

	while (query.next())
	{
	  InfoEquipPatient info;

	  info.Hospital = query.value("Hospital").toString();
	  info.Doctor = query.value("Doctor").toString();
	  info.PatientId = query.value("PatientId").toString();
	  info.PatientName = query.value("PatientName").toString();
	  info.PatientSex = query.value("PatientSex").toString();
	  info.PatientAge = query.value("PatientAge").toString();
	  info.Disease = query.value("Disease").toString();
	  info.Location = query.value("Location").toString();
	  info.Time = query.value("Time").toString();
	  info.CodeEquip = query.value("EquipCode").toString();
	  infos.push_back(info);
	}
  } 
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
	//创建数据库连接
	Database *m_database = Database::instance();
	m_database->CreateConnect();

    return a.exec();
}

//XXX.h
#include"Database.h"

Database *m_database;//类内声明

//XXX.cpp调用数据库查询
m_database = Database::instance();
QVector<InfoEquipPatient> infos;
m_database->GetAllInfoEquips(infos);

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值