最近在工作上开始尝试使用Qt来写一些小程序,因为Qt是刚学习的,很多功能都是第一次使用,所以特意整理了一下。
创建,连接,增,删,查,改,满足了数据库的基本使用。
头文件包含
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
1.创建数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "mysql");//创建数据库,参数二用于在使用中连接数据库;
db.setDatabaseName("UserInfo.db");//设定数据的保存路径;
if(!db.open())
{
//能打开就证明数据库成功创建;
qDebug()<< "数据库创建失败!";
}
QSqlDatabase db = QSqlDatabase::database("mysql");//连接数据库,参数为创建时设定的连接名称;
2.创建表格
QSqlQuery query(db);//新建数据库操作索引;
bool Rsl = query.exec("create table user(id int primary key, name nvarchar(10), gender nvarchar(2),"
"age int, height int)");//新建数据表
if(Rsl)
{
qDebug()<< "创建数据表成功!";
}
else
{
qDebug()<< "创建数据表失败!";
}
3.增
QSqlQuery query(db);//创建数据库操作索引;
//方法一;
query.prepare("insert into user values(?, ?, ?, ?, ?)");//数据库前置指令,与后面的指令配合使用;
query.bindValue(0, 1);
query.bindValue(1, "李四");
query.bindValue(2, "男");
query.bindValue(3, 25);
query.bindValue(4, 175);
bool Rsl = query.exec();//执行上面的操作;
//方法二
Rsl = query.exec(QString("insert into user values(%1, %2, '男', 20, 170)").arg(4).arg("'陈五'"));
if(Rsl)
{
qDebug()<< "插入数据成功!";
}
else
{
qDebug()<< "插入数据失败!";
}
4.删
QSqlQuery query(db);
bool Rsl = query.exec(QString("delete from user where id = %1").arg(1));
if(Rsl)
{
qDebug()<< "删除数据成功!";
}
else
{
qDebug()<< "删除数据失败!";
}
5.查
QSqlQuery query(db);
//该指令返回的结果仅表示该数据库语句执行结果,并不代表查询结果;
bool Rsl = query.exec(QString("select * from user"));
if(Rsl)
{
qDebug()<< "查询成功!";
QString qstr;
while(query.next())//指向查询结果的列表,重复执行相当于指针递增;遍历所有查询结果;
{
qstr += query.value(0).toString() + "\t";//对应数据表中关键字1;
qstr += query.value(1).toString() + "\t";//对应数据表中关键字2;
qstr += query.value(2).toString() + "\t";//对应数据表中关键字3;
qstr += query.value(3).toString() + "\t";//对应数据表中关键字4;
qstr += query.value(4).toString() + "\t";//对应数据表中关键字5;
qDebug()<< qstr;
}
}
else
{
qDebug()<< "查询失败!";
}
6.改
QSqlQuery query(db);
//方法一
query.prepare(QString("update user set age = ?, height = ? where id = %1").arg(2));
query.bindValue(0, 27);
query.bindValue(1, 180);
bool Rsl = query.exec();
//方法二
Rsl = query.exec(QString("update user set age = %1, height = %2 where id = %3").arg(29).arg(190).arg(3));
if(Rsl)
{
qDebug()<< "更新数据成功!";
}
else
{
qDebug()<< "更新数据失败!";
}
问题总结:
1)使用中最常见的问题是sql语句错误,这些错误编译器是检查不出来的,因为它们在这里都是字符串,只有在运行时验证这些语句是否执行成功。因此判断执行结果很有必要,当出现执行失败时不妨检查sql语句是否存在错误,包括书写语法及书写错误。
2)当数据库已存在某条记录时,再去插入同关键字记录也会操作失败,所以插入前需先检查一下是否存在该记录,存在则选择更新,不存在则插入。
3)需要在pro文件里加上
QT+=sql
因为 数据库是Qt的一个模块;
本文对应【Demo】