【Qt數據庫操作】使用Qt操作常見的數據庫

Qt操作QSQLLITE數據庫

使用QSqlDatabase::removeDatabase函數之前要保證連接名對應的QSqlDatabase對象釋放或者銷燬,否則可能會有內存泄漏。
QSqlDatabase::addDatabase之前要使用QSqlDatabase::contains判斷連接名是否存在。存在則使用QSqlDatabase::database。
注意代碼中的局部區域,作用是銷燬m_QSqlDatabase然後調用removeDatabase。

代碼如下:

void MainWindow::on_pushButton_clicked()
{
    // local variable destory m_QSqlDatabase
{
    QSqlDatabase m_QSqlDatabase;
    if(QSqlDatabase::contains("XiaoGongwei_SqlLite"))
        m_QSqlDatabase = QSqlDatabase::database("XiaoGongwei_SqlLite");
    else
        m_QSqlDatabase = m_QSqlDatabase.addDatabase("QSQLITE", "XiaoGongwei_SqlLite");
    m_QSqlDatabase.setDatabaseName("MyDataBase.db");
    if(!m_QSqlDatabase.open())
        qDebug() << "open Sql failed: " << m_QSqlDatabase.lastError();

    QSqlQuery myQuery(m_QSqlDatabase);

    if(!myQuery.exec("drop table student"))
        qDebug() << "QSqlQuery delete table failed: " << myQuery.lastError();

    if(!myQuery.exec("create table student(id int primary key, name text, age int)"))
        qDebug() << "QSqlQuery Sql failed: " << myQuery.lastError();

    for(int i = 0;i < 100;i++)
    {
        QString cmdSql = QString("insert into student VALUES(%1, \"%2\", %3)").arg(i).arg("xiao").arg(99);
        if(!myQuery.exec(cmdSql)){
            qDebug() << "QSqlQuery exec failed: " << myQuery.lastError();
        }
    }
    bool isActiveQuery = false;
    isActiveQuery = myQuery.isActive();
    myQuery.clear();
    isActiveQuery = myQuery.isActive();
    m_QSqlDatabase.close();
    QStringList connNames = m_QSqlDatabase.connectionNames();
    int a = 0;
}
    QSqlDatabase::removeDatabase("XiaoGongwei_SqlLite");// m_QSqlDatabase must delete before removeDatabase()



}

Qt遠程操作MySql數據庫

當你安裝了Appserv或者MySql服務端就會在3306端口開啓mysql服務,這樣客戶端就可以通過遠程操作mysql數據庫,代碼如下:

void MainWindow::on_pushButton_2_clicked()
{
    // local variable destory m_QSqlDatabase
{
    QSqlDatabase m_QSqlDatabase;
    if(QSqlDatabase::contains("XiaoGongwei_SqlLite"))
        m_QSqlDatabase = QSqlDatabase::database("XiaoGongwei_SqlLite");
    else
        m_QSqlDatabase = m_QSqlDatabase.addDatabase("QMYSQL", "XiaoGongwei_SqlLite");
    m_QSqlDatabase.setHostName("103.46.128.***");// IP
    m_QSqlDatabase.setUserName("admin");
    m_QSqlDatabase.setPassword("admin123");
    m_QSqlDatabase.setDatabaseName("test");
    m_QSqlDatabase.setPort(3306);

    if(!m_QSqlDatabase.open())
        qDebug() << "open Sql failed: " << m_QSqlDatabase.lastError();

    QSqlQuery myQuery(m_QSqlDatabase);

    if(!myQuery.exec("drop table student"))
        qDebug() << "QSqlQuery delete table failed: " << myQuery.lastError();

    if(!myQuery.exec("create table student(id int primary key, name text, age int)"))
        qDebug() << "QSqlQuery Sql failed: " << myQuery.lastError();

    for(int i = 0;i < 100;i++)
    {
        QString cmdSql = QString("insert into student VALUES(%1, \"%2\", %3)").arg(i).arg("xiao").arg(i+99);
        if(!myQuery.exec(cmdSql)){
            qDebug() << "QSqlQuery exec failed: " << myQuery.lastError();
        }
    }

    // query data
    myQuery.exec("select * from student");
    if(!myQuery.exec())
    {
        qDebug()<<myQuery.lastError();
    }
    else
    {
        while(myQuery.next())
        {
            int id = myQuery.value(0).toInt();
            QString name = myQuery.value(1).toString();
            int age = myQuery.value(2).toInt();
            qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
        }
    }

    //delete data
    myQuery.exec("delete from student where id = 1");
    if(!myQuery.exec())
    {
        qDebug()<<myQuery.lastError();
    }
    else
    {
        qDebug()<<"deleted!";
    }

    bool isActiveQuery = false;
    isActiveQuery = myQuery.isActive();
    myQuery.clear();
    isActiveQuery = myQuery.isActive();
    m_QSqlDatabase.close();
    QStringList connNames = m_QSqlDatabase.connectionNames();
    int a = 0;
}
    QSqlDatabase::removeDatabase("XiaoGongwei_SqlLite");// m_QSqlDatabase must delete before removeDatabase()

}

QSqlTabelModel

    QSqlDatabase m_QSqlDatabase;
    if(QSqlDatabase::contains("XiaoGongwei_SqlLite"))
        m_QSqlDatabase = QSqlDatabase::database("XiaoGongwei_SqlLite");
    else
        m_QSqlDatabase = m_QSqlDatabase.addDatabase("QSQLITE", "XiaoGongwei_SqlLite");
    m_QSqlDatabase.setDatabaseName("MyDataBase.db");
    if(!m_QSqlDatabase.open())
        qDebug() << "open Sql failed: " << m_QSqlDatabase.lastError();

    QSqlQuery myQuery(m_QSqlDatabase);


    QString selectsql ="select * from student";
    myQuery.exec(selectsql);
    if(!myQuery.next())
    {
        if(!myQuery.exec("create table student(id int primary key, name text, age int)"))
            qDebug() << "QSqlQuery Sql failed: " << myQuery.lastError();
        else{
            for(int i = 0;i < 10;i++)
            {
                QString cmdSql = QString("insert into student VALUES(%1, \"%2\", %3)").arg(i).arg("xiao").arg(99);
                if(!myQuery.exec(cmdSql)){
                    qDebug() << "QSqlQuery exec failed: " << myQuery.lastError();
                }
            }
        }
    }
    else{

    }

    mp_QSqlTableModel = new QSqlTableModel(this, m_QSqlDatabase);
    ui->tableView->setModel(mp_QSqlTableModel);

    mp_QSqlTableModel->setTable("student");

    bool isgood = mp_QSqlTableModel->select();
    if(!isgood)
        qDebug() << "QSqlTableModel select failed: " << mp_QSqlTableModel->lastError();
    mp_QSqlTableModel->setHeaderData(0, Qt::Horizontal, "學號");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章