QT笔记:(一)如何连接MySQL数据库和基本操作

基本语法

1.首先在.pro文件里加入QT += sql,让qt支持MySQL
2.QSqlDatabase类是实现了数据库连接的操作
3.QSqlQuery类执行SQL语句
4.QSqlRecord类封装数据库所有记录

基本语法

QSqlDatabase类

QSqlDatabase db = QSqlDatabase::addDatabase("QOCI"); 
		db.setHostName("localhost");    //数据库主机名   
		db.setDatabaseName("scott");    //数据库名   
		db.setUserName("stott");        //数据库用户名   
		db.setPassword("tiger");        //数据库密码   
		db.open();          //打开数据库连接  
		db.close();         //释放数据库连接  
一:初始化数据库

示例代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(m_sRemoteIP);
    db.setPort(m_nRemotePort);
    db.setDatabaseName(m_sSqlName);
    db.setUserName(m_sUserName);
    db.setPassword(m_sPassWord);
    if (!db.open())
    {
        QMessageBox::information(NULL,"提示","数据库连接失败");
        qDebug()<<db.open()<<"Cannot open database!!!";
    }
二:连接数据库

**.h

 bool connectMySql();    //连接数据库

**.cpp

bool 类名::connectMySql()
{
    //创建连接
    bool ok = db.open();
    if(!ok)
    {
        qDebug()<<"connect to mysql fail";
        return false;
    }
    else
    {
        qDebug()<<"connect to mysql OK";
        return true;
    }
    qDebug()<<db.connectionName();
//    QSqlDatabase::removeDatabase("narivdg");    //移除数据库
}
三:关闭数据库

**.h

void closeMySql();     //关闭数据库连接

**.cpp

void 类名r::closeMySql()
{
//    QSqlDatabase db = QSqlDatabase::database("narivdg"); //获得实例。
//    if(db.isOpen())
//    {
//        db.close();     //关闭数据库
//        qDebug()<<"Database data exceptionally successful!";
//    }
//    QString name = db.connectionName();
//    QSqlDatabase::removeDatabase(name);
//    QSqlDatabase::removeDatabase(db.connectionName())
    QString name;
       {
           name = QSqlDatabase::database().connectionName();
           if(QSqlDatabase::database().isOpen())
           {
               QSqlDatabase::database().close();    //关闭数据库
               qDebug()<<"Database data exceptionally successful!";
           }
       }//超出作用域,隐含对象QSqlDatabase::database()被删除。
       //QSqlDatabase::removeDatabase(name);
}

QSqlQuery类
插入值(sql语句)到数据库操作
两种插入方式:
(1)直接用SQL语句插入(参照上面)
(2)利用预处理方式插入(ORACLE语法和ODBC语法)
适合插入多条记录,或者避免将值转换成字符串(即正确地转义),调用prepare()函数指定一个包含占位符的query,然后绑定要插入的值

示例代码:
(1)的示例代码

if(!connectMySql())
    {
        m_pMutex->unlock();
        qDebug()<<"Database data opening failed!";
        return;
    }
    qDebug()<<"Database data opened successfully!";

    //从数据库提取数据信息
    QSqlQuery query;	//注意这个必须要写在connectMySql()后面,不然有时候会出现问题
    QString sql = QString("select ....");	//里面写想要实现功能的MySQL语法
     query.exec(sql);   	//这一句执行后就等同于在数据库里执行了MySQL语句了
     while(query.next())	//注意这语句只有在只是select语法时才会执行
     {
     	//需要执行的语句(查询数据库操作)
     	QString name = query.value(0).toString(); //取第i条记录第1个字段(从0开始计数)的结果  
	int age = query.value(1).toInt(); //取第i条记录第2个字段的结果  
     }

    //如果执行的不是select语句,那可以用下面的语句进行替代上面的语句
    if( query.exec(sql))
    {
    	//需要执行的语句
    	...
    }
    
     closeMySql();  //关闭数据库

(2)的示例代码
ORACLE语法

QSqlQuery query;   
query.prepare("INSERT INTO T_STUDENT (name, age) VALUES (:name, :age)"); //准备执行SQL查询  
query.bindValue(":name", "小王");   //在绑定要插入的值  
query.bindValue(":age", 11);   
query.exec();  

ODBC语法

QSqlQuery query;  
query.prepare("INSERT INTO T_STUDENT (name,age) VALUES (?,?)"); //准备执行SQL查询  
query.addBindValue("小王");   //在绑定要插入的值  
query.bindValue(11);  
query.exec();  

基本操作语法:
seek(int n) :query指向结果集的第n条记录。指定当前的位置
first() :query指向结果集的第一条记录。
last() :query指向结果集的最后一条记录。
next() :query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。
previous() :query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。
record() :获得现在指向的记录。
value(int n) :获得属性的值。其中n表示你查询的第n个属性
int rowNum = query.at(); //获取query所指向的记录在结果集中的编号
int fieldNo = query.record().indexOf(“name”); //返回"name"的列号
int columnNum = query.record().count(); //获取每条记录中属性(即列)的个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值