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, "學號");