当先锋百科网

首页 1 2 3 4 5 6 7

以Mysql为例

//1.包含头文件
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlDatabase>
#include<QSqlQuery>
#include <QSqlError>
#include <QDebug>

//2.确定所用数据库的驱动
QStringList list=QSqlDatabase::drivers();
qDebug()<<list;

//3.创建数据库实例
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL")//只能通过该静态方法创建,构造方法不行

//4.设置数据库属性
//1.设置要连接的主机名(本地的话就是localhost(127.0.0.1)),远程填远程服务器ip地址
db.setHostName("localhost");
//2.设置要连接的用户名
db.setUserName("你的用户名");
//3.设置要连接数据库名
db.setDatabaseName("你的数据库名");
//4.设置数据库名对应的密码
db.setPassword("你的数据库密码");
//5.设置端口号(mysql默认为3306)
db.setPort(3306);

//5.连接
//使用open()函数来连接 成功-true 失败-false
if(!db.open())
{
	//使用lasterror获取数据库操作最后一次错误操作信息--使用QSqlError的text()函数将其转换为qstring
	qDebug()<<"失败原因: "<<db.lastError().text();
}
else
{
	qDebug()<<"连接成功!";
}
  • 操作数据库
    • 通过QSqlQuery类进行查询对数据库进行增删改查
//使用QSqlQuery来操作数据库(增删查改)
 QSqlQuery query(db);
#if 0
    //查
    QString sql="select * from empp";
    //通过该方法来执行sql语句
    query.exec(sql);//如果不在构造函数里指定sql就必须在exec里指定sql语句
    //执行成功就会在query里得到一个结果集通过循环来访问它
    while(query.next())//next():得到结果集中的一条结果(也就是数据库的每一行),如果遍历完返回false
    {
        //去除每条记录的字段值(从0开始,0代表id 1代表年龄 2代表姓名)
        qDebug()<<query.value(0).toInt()<<query.value(1).toInt() //value返回的是全能类型(Qvariant)需要转换为字段的真实类型
               <<query.value(2).toString()<<endl;
    }
#endif

#if 0
    //增(insert插入数据时字符串和日期数据类型需要用''包围,其他类型不需要)
    int id=7;
    int age=22;
    QString name("李白");
    QString sql = QString("insert into empp(id,age,name) values(%1,%2,'%3')").arg(id).arg(age).arg(name);//这里%1就是id,%2就是age...
    query.exec(sql);

#endif

#if 0
    //改--修改id为5的数据(李新)
    int id=5;
    int newId=7;
    int newAge=22;
    QString newName("李白");
    QString sql = QString("update empp set id=%1,age=%2,name='%3' where id=%4").arg(newId).arg(newAge).arg(newName).arg(id);
    query.exec(sql);

#endif

#if 1
    //删--删除id为8的数据
    int id=8;
    QString sql = QString("delete from empp where id = %1").arg(id);
    query.exec(sql);

#endif

//断开数据库连接
db.close();