我这里用的是QT4创建的Gui应用。
在开始写SQL单例之前要在.pro工程中添加QT += core gui sql
.h文件
#ifndef MYSQL_H
#define MYSQL_H
#include <QVariant>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
class MySql
{
public:
static MySql*Instance() //获取单例指针
{
if(!m_sql)
m_sql = new MySql();
return m_sql;
}
//提供对外接口
void CreateTable();
void InsertData();
void SelectData();
void DeleteData();
private:
//提供一个private 构造函数(防止外部调用构造类的实例)
MySql();
~MySql();
static MySql *m_sql; //静态指针
static QSqlDatabase db;
};
#endif // MYSQL_H
.c文件
#include "mysql.h"
MySql* MySql::m_sql = NULL;
QSqlDatabase MySql::db;
MySql::MySql()
{
if(QSqlDatabase::contains("qt_connect_db_fail!!"))
db = QSqlDatabase::database("qt_connect_db_fail!!");
else
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
if(!db.open())
{
qDebug()<<"open fail!";
}
else
{
qDebug()<<"open success";
}
CreateTable();
//InsertData();
//SelectData();
//DeleteData();
//SelectData();
}
MySql::~MySql()
{
db.close();
}
void MySql::CreateTable()
{
QSqlQuery query(db);
QString base = "create table student(id int primary key,name text,age int)";
if(!query.exec(base))
{
qDebug()<<"Error:faild to Create table!";
}
else
{
qDebug()<<"Success to Create table!";
}
}
void MySql::InsertData()
{
QSqlQuery str_query(db);
str_query.exec("insert into student values(1,'zhangsan',18)");
str_query.exec("insert into student values(2,'lisi',19)");
}
void MySql::SelectData()
{
QSqlQuery str_query(db);
QString data = "select *from student";
if(!str_query.exec(data))
{
qDebug()<<"Error:faild to SelectData!";
}
else
{
while(str_query.next())
{
int id = str_query.value(0).toInt();
QString str_name = str_query.value(1).toString();
int age = str_query.value(2).toInt();
qDebug()<<QString("id:%1 name:%2 age:%3").arg(id).arg(str_name).arg(age);
}
}
}
void MySql::DeleteData()
{
QSqlQuery str_query(db);
QString data = "delete from student where name = 'lisi' ";
if(!str_query.exec(data))
{
qDebug()<<"Error:faild to DeleteData!";
}
else
{
qDebug()<<"Success to DeleteData!";
}
}