在Qt代码中实现Mysql数据库的创建、数据库删除
(2018-06-29 17:01:01)
标签:
mysqlqt代码创建数据库 |
分类: 计算机 |
一、首先研究一下通过sql语句创建和删除数据库:
创建数据库:
create database if not exists 数据库名 DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
这个语句设置数据库缺省字符集为utf8,排序规则为utf8_general_ci。如果数据库已经存在,则不创建。
删除数据库:
drop database if exists 数据库名
这个语句在数据库存在时删除之,可防止数据库不存在时报错。
二、现在研究如何在qt中用代码实现上述功能:
要想对数据库进行操作,首先需要指定一个数据库名,然后打开数据库,然后才能进行数据库相关操作。所以首先打开一个系统中已经存在的数据库,我们选择sys。
程序代码如下:
dataType.h 内容:
//数据库连接参数
typedef struct _structDbConnPara
{
QString sIP;
int iPort;
QString sDbName;
QString sUserName;
QString sPassWord;
_structDbConnPara()
{
reset();
}
reset()
{
sIP = "localhost";
iPort = 3306;
sDbName = "dbTest";
sUserName = "root";
sPassWord = "Hello";
}
}structDbConnPara;
sqlDatabase.h 内容:
#define SQLDATABASE_H
#include "dataType.h"
#include
#include
#include >
class SqlDatabase
{
public:
SqlDatabase();
~SqlDatabase();
void setDbPara( const structDbConnPara &dbConnParaToSet );
bool openDb();
bool closeDb();
bool createDb( const QString& dbName );
private:
QSqlDatabase sqlDb;
QSqlQuery sqlQuery;
structDbConnPara dbConnPara;
bool m_bDbIsOpen;
};
#endif // SQLDATABASE_H
sqlDatabase.cpp 文件内容:
#include "SqlDatabase.h"
#include
#include
#include
SqlDatabase::SqlDatabase()
{
m_bDbIsOpen = false;
sqlDb = QSqlDatabase::addDatabase("QMYSQL");
sqlQuery = QSqlQuery(sqlDb);
}
SqlDatabase::~SqlDatabase()
{
}
void SqlDatabase::setDbPara( const structDbConnPara &dbConnParaToSet )
{
sqlDb.setHostName(dbConnParaToSet.sIP);
sqlDb.setPort(dbConnParaToSet.iPort);
sqlDb.setDatabaseName(dbConnParaToSet.sDbName);
sqlDb.setUserName(dbConnParaToSet.sUserName);
sqlDb.setPassword(dbConnParaToSet.sPassWord);
dbConnPara = dbConnParaToSet;
}
bool SqlDatabase::openDb()
{
if( m_bDbIsOpen )
return true;
if( !sqlDb.open() ) {
m_bDbIsOpen = false;
//outPutDbExecError( "Cannot open database, Unable to establish a database connection:" );
return false;
}
m_bDbIsOpen = true;
return true;
}
bool SqlDatabase::closeDb()
{
sqlDb.close();
m_bDbIsOpen = false;
}
bool SqlDatabase::createDb(const QString &dbName)
{
if( !m_bDbIsOpen )
return false;
bool success = false;
QString sQuery;
QSqlQuery *pSqlQur = new QSqlQuery( sqlDb );
//构建语句
sQuery = QObject::tr("create database if not exists %1 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci").arg( dbName );
//执行
success= pSqlQur->exec( sQuery );
if( !success ){
QString sErr = QObject::tr("failed to create database '%1', the sql statement is: %2:.").arg( dbName ).arg( sQuery );
//outPutDbExecError( sErr );
return false;
}
else
qDebug() << QObject::tr("Database '%1' has been created successfully.").arg( dbName );
delete pSqlQur;
return true;
}
main.cpp 内容:
#include "sqlDatabase.h"
#include"dataType.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//创建数据库
structDbConnPara* pDbPara = new structDbConnPara;
pDbPara->sIP = QObject::tr("localhost");
pDbPara->iPort = 3306;
pDbPara->sDbName = QObject::tr("sys"); //这里先用sys数据库打开
pDbPara->sUserName = QObject::tr("root");
pDbPara->sPassWord = QObject::tr("Hello");
SqlDatabase*db = new SqlDatabase();
db->setDbPara( *pDbPara );
db->openDb();
db->createDb( "mydb" );
db->closeDb();
delete db;
delete pDbPara;
int r = a.exec();
return r;
}
程序执行完一次后,应该能看到mydb这个数据库已经存在了。
数据库删除方法类似,只需要替换相应的sql语句即可。
前一篇:TTL电平与CMOS电平