QT中使用QSqlDatabase 时出现的问题。
来源:互联网 发布:深圳行知美术学校 编辑:程序博客网 时间:2024/06/11 00:36
1、 程序中用一个类封装了一个操作数据库文件的方法,但是我需要在不同的窗口中调用该数据库(多个应用连接数据),如果我在不同窗口中分别定义了该数据库类的变量,运行的过程中会出现以下警告:
QSqlDatabasePrivate::removeDatabase: connection 'nice' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'nice', old connection removed.
解决方法:
即在定义该数据库变量时,传递一个字符参数,该参数作为QSqlDatabase::addDatabase("QSQLITE",name),从而可区分不同连接到数据库的连接,即不会出现上述警告的出现。
serverDataBase::serverDataBase(QString name)
{
bool create = !QFile::exists("Database.db"); // 判断该数据库是否存在
db = QSqlDatabase::addDatabase("QSQLITE",name); // 创建QSqlDatabase对象,
并且指定QSQLITE驱动程序来访问该数据库。
qDebug()<<"QSQLITE driver valid" <<db.isValid();
db.setDatabaseName("Database.db"); // 设置该数据库的名字。
qDebug()<<db.lastError();
if (!db.open()) // 判断该数据库是否能够打开。
{
QMessageBox::warning(NULL, tr("Error"),tr("Can not open the sqlite database"));
exit(2);
}
if(create) // 判断该数据库是否存在,不存在就创建。
createTable();
qDebug()<<QSqlDatabase::drivers(); // 打印支持SQL的驱动.
}
2、运行数据库插入数据时,出现如下错误:
QSqlQuery::prepare: database not open
从以上错误信息可是看出是操作该数据库的驱动没有加载成功,而出现这种情况有两个原因:
其一:QT软件包中没有支持db = QSqlDatabase::addDatabase("QSQLITE",name); 该函数中第一个参数的
驱动,需要人为手动添加该驱动。
其二:就是在调用该数据库成员函数的方法时,没有指定该驱动的指针,也会导致该问题的发生(我就是出现在这个问题下)
解决方法:
使用 query时 加一句 : query = QSqlQuery(db); 这个就可以关联到你之前 db打开的那个数据库了,这样 query 才能 在 db_name 这个数据库中执行操作.
示例代码:
/*
功能: 注册新用户(添加).
para1: 用户注册信息.
返回值: 返回注册结果(用户已存在,新用户注册成功)
*/
qint32 serverDataBase::registerNewUser(QString userMess)
{
qint32 replyKind;
QSqlQuery query;
query = QSqlQuery(db);
//查询用户是否存在.
query.prepare("select count(account) from users where account=:account");
query.bindValue(":account", userMess.mid(0,8));
query.exec();
errorSQLOrder(query, "registerRequest1");
query.next();
//用户已经存在.
if(query.value(0).toInt() != 0)
{
replyKind = REGISTER_EXIST;
return replyKind;
}
//添加用户.
query.prepare("insert into users values(:acc, :pwd, :mobile)");
query.bindValue(":acc", userMess.mid(0,8));
query.bindValue(":pwd", userMess.mid(8,6));
query.bindValue(":mobile", userMess.mid(14,11));
query.exec();
errorSQLOrder(query, "registerRequest2");
replyKind = REGISTER_SUCCESS;
return replyKind;
}
- QT中使用QSqlDatabase 时出现的问题。
- QT中使用QSqlDatabase 时出现的问题。
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- Qt中使用QSqlDatabase::removeDatabase()的正确方法
- qt数据库多线程问题的解决(QSqlDatabase 同一个连接只能在创建它的线程中使用)
- QT 009 QSqlDatabase 数据库类的使用
- Centos 7 中 QT出现QSqlDatabase: MYSQL driver not loaded
- 关于QT使用QSqlDatabase的警告信息的解决方法.
- Qt中使用SQLITE时如何获取一个数据库中的表名QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("ac
- VS下QT插件 连接数据库出现error LNK2019: 无法解析的外部符号QSqlDatabase问题解决
- SVN的配置与使用方法
- IOS开发(81)之构造路径
- linux性能分析工具
- 终结中文乱码
- C语言学习第三天(练习)
- QT中使用QSqlDatabase 时出现的问题。
- FlowChart.NET强大的功能特性
- 简化页面访问路径
- JQuery实现滚动到页面底端时自动加载更多信息
- 三星宣称5G移动数据传输有重大突破
- C语言学习第四天上午(练习)
- 辗转相除法
- 加入收藏功能函数
- AndEngine_example2.1 运动的球