目录
1、SQLite 数据库
1.1、创建数据库连接
1.2、打开数据库连接
1.3、关闭数据库连接
1.4、查询数据库示例 (结果为单条数据)
1.5、查询数据库示例2(结果为多条数据)
2、数据转换
2.1、QString 转 std::string
2.2、std::string 转 QString
2.3、QByteArray 转 QImage
2.4、QImage 转 QByteArray
第一次写 C++ 项目,下面总结的是本人开发过程中需要搜索的东西。
总结一下,便于以后查阅!
(会持续补充)
1、SQLite 数据库
Qt 自带 Sqlite 数据库, 不需要安装,直接使用便可。
1.1、创建数据库连接
#include <QtSql> // 包含 sql 头文件
// 创建数据库连接
void createDatabase()
{
// 连接的数据库地址 (有就打开,没有就创建)
QString dbName("D://XXX//xxx.db");
// 指定数据库是 SQLite 数据库
QSqlDatabase m_sqlDB = QSqlDatabase::addDatabase("QSQLITE");
m_sqlDB.setDatabaseName(dbName);
}
1.2、打开数据库连接
// 打开数据库连接
void openDatabase()
{
m_sqlDB.open();
}
1.3、关闭数据库连接
// 关闭数据库连接
void closeDatabase()
{
m_sqlDB.close();
}
1.4、查询数据库示例 (结果为单条数据)
// 根据学生id 查询学生信息
Student* getStudentById(int id)
{
// 打开数据库连接
m_DBManager->openDatabase();
QSqlQuery query = QSqlQuery(m_sqlDB);
// 写查询 sql (带参数, :id 是占位符)
query.prepare("select id, age, name from student where id = :id");
// 给占位符赋值
query.bindValue(":id", id);
// 执行 sql
query.exec();
// 取第一条数据 (当结果只有一条数据时这样操作,否则取不到值)
query.first();
Student* stu = new Student();
stu->id = query.value(0).toInt(); // id, value可以根据下标来取值
stu->age = query.value("age").toInt(); // 年龄,value可以根据名称来取值
// 名称(转为std::string 格式)
stu->name = std::string(query.value("name").toString().toLocal8Bit());
// 关闭数据库连接(这一步不要忘了)
m_DBManager->closeDatabase();
return stu;
}
1.5、查询数据库示例2(结果为多条数据)
// 根据学生id 查询学生信息
std::vector<Student*> getAllStudent()
{
// 打开数据库连接
m_DBManager->openDatabase();
QSqlQuery query = QSqlQuery(m_sqlDB);
// 写查询 sql
query.exec("select id, age, name from student");
std::vector<Student*> students; // 创建学生集合
// 多条数据循环取值
while(query.next())
{
Student* stu = new Student();
stu->id = query.value(0).toInt(); // id, value可以根据下标来取值
stu->age = query.value("age").toInt(); // 年龄,value可以根据名称来取值
// 名称(转为std::string 格式)
stu->name = std::string(query.value("name").toString().toLocal8Bit());
students.pushback(stu);
}
// 关闭数据库连接(这一步不要忘了)
m_DBManager->closeDatabase();
return students;
}
2、数据转换
2.1、QString 转 std::string
// 第一种方式 (在数据库中取值时用这种)
std::string std = std::string(query.value(0).toString().toLocal8Bit());
// 第二种方式
QString aaa = "bbb";
std::string str = aaa.toStdString();
2.2、std::string 转 QString
std::string aaa = "bbb";
QString str = QString::fromStdString(aaa);
2.3、QByteArray 转 QImage
// 假如有一个 ByteArray
ByteArray byteArray = .........;
QImage image;
image.loadFromData(byteArray);
return image;
2.4、QImage 转 QByteArray
QImage image = QImage("c://aaa.png");
QByteArray byteArray;
QBuffer buffer;
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG");
byteArray.append(buffer.data());
return byteArray;