-
Notifications
You must be signed in to change notification settings - Fork 1
/
db_connect.cpp
51 lines (48 loc) · 2 KB
/
db_connect.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include"db_connect.h"
#include<exception>
/*
* 在Qt上使用SQLite的时候(我的程序是使用QMYSQL时会出现这个问题),如果第二次使用QSqlDatabase::addDatabase()方式时,就会出现以下错误提示:
*
* QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
*
* 解决方法是:先判断一下这个默认的连接名是否存在,如果不存在才使用addDatabase()方法,如果存在则使用database()方法。
*/
QSqlDatabase DButil::getDatabase(){
QSqlDatabase db;
try {
if(!db.open()){
if(QSqlDatabase::contains("qt_sql_default_connection"))
db = QSqlDatabase::database("qt_sql_default_connection");
else
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("home_work_cpp");
db.setUserName("xxxx");
db.setPassword("xxxxx");
if(!db.open()){
std::exception r;
throw r;
}else{
qDebug()<<"打开QSqlDatabase(MySQL)成功";
}
return db;
}
} catch (std::exception e) {
qDebug() << "打开QSqlDatabase(MySQL)失败";
qDebug() <<e.what();
}
return db;
}
//传入sql以查询数据库,然后返回query,该方法适用于不需要其他参数的查询语句
//对于传入sql的方法,由于有时需要用?来占位,导致参数长度不一致,所以这个方法用的不多
QSqlQuery DButil::Statement(QString sql){
QSqlDatabase db= getDatabase();
QSqlQuery query;
if(!query.exec(sql)){
qDebug()<<"query from home_work_cpp error";
qDebug()<<query.lastError();
}
db.close();
return query;
}