- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我 2014 年末的 MacBook Pro 上使用 Qt 4.8.6
和 clang++ x86_64-apple-darwin14.3.0
我发现 QsqlTableModel::insertRecord()
无法写入目标 MYSQL
数据库:myDB
而构造 QSqlDatbase
:myDB
使用非- 默认连接如:
db = QSqlDatabase::addDatabase("QMYSQL","Connection1");
和 insertRecord(-1,myRecord)
的计算结果为 false
。
相反,如果我使用通常的默认连接:
db = QSqlDatabase::addDatabase("QMYSQL");
数据库已成功添加为:
mysql> select * from myTable;
+------+------+
| col1 | col2 |
+------+------+
| 1 | 2 |
| 5 | 6 |
+------+------+
2 rows in set (0.00 sec)
容纳多个连接名称的通常建议是使用 QSqlDatabase
构造 QSqlQuery
如下:
QSqlQuery query(db)
在这种情况下,这显然没有帮助。你能指出遗漏了什么吗?
下面是一小部分可运行的代码,说明了上面的内容:
testdb.h
#ifndef TESTDB_H
#define TESTDB_H
#include <QtSql>
#include <QtCore>
class TestDB
{
public:
TestDB();
~TestDB();
void dbInit();
void appendDB(const int &col1, const int &col2);
private:
QSqlDatabase db;
QSqlTableModel *model;
};
#endif // TESTDB_H
testdb.cpp
#include "testdb.h"
TestDB::TestDB()
{
dbInit();
}
TestDB::~TestDB()
{
}
void TestDB::dbInit()
{
// database connection
db = QSqlDatabase::addDatabase("QMYSQL","Connection1");
db.setDatabaseName("myDB");
db.setUserName("root");
db.setPassword("");
db.setHostName("localhost");
db.setConnectOptions();
if (!db.open())
{
qDebug() << "Database error occurred in class: stockinfo" << db.lastError().text();
}
QSqlQuery query(db);
// create database named transactions
query.exec("CREATE DATABASE IF NOT EXISTS myDB;");
query.exec("USE myDB;");
query.exec("CREATE TABLE IF NOT EXISTS myTable("
"col1 INT,"
"col2 INT"
");");
model = new QSqlTableModel;
model->setTable("myTable");
model->select();
}
void TestDB::appendDB(const int &col1, const int &col2)
{
QSqlRecord myRecord;
myRecord.append(QSqlField("col1", QVariant::Int));
myRecord.append(QSqlField("col2", QVariant::Int));
myRecord.setValue("col1",col1);
myRecord.setValue("col2",col2);
model->insertRecord(-1,myRecord);
qDebug() << "model->insertRecord(-1,myRecord) = " << model->insertRecord(-1,myRecord);
qDebug() << "Last Database error: " << db.lastError().text();
}
main.cpp
#include <QCoreApplication>
#include <testdb.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TestDB myTestDB;
myTestDB.appendDB(1,2);
myTestDB.appendDB(5,6);
return a.exec();
}
dbTest.pro
QT += core sql
QT -= gui
TARGET = dbTest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
testdb.cpp
HEADERS += \
testdb.h
最佳答案
当您创建QSqlTableModel
(testdb.cpp:35) 时,您没有指定任何数据库连接,因此您的模型包含默认连接。这可能不是您想要的,未经测试。参见 documentation
关于c++ - QSqlTableModel::insertRecord() 使用非默认连接名称的 QSqlDatabase 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30378883/
我已经创建了一个肯定存在于项目目录中的数据库,我可以使用 DBBrowser 和 Ubuntu 终端打开它。它们都显示数据库包含“电影”表,但我在 C++ 中的代码说找不到这样的表 QSqlDatab
我只有一个与数据库的连接,用于我正在开发的库存应用程序。 我现在正在做的是每次需要对 dB 进行查询时调用 open(),然后执行 close()。 这样做比仅仅打开连接并保持打开状态有什么好处吗?
我需要在本地系统上存储一些值并稍后以表格格式访问它,所以我选择了 QSqlDatabase。首先我必须检查数据库是否已经存在。但是使用下面的代码我总是收到消息 Data base not exist
from PyQt4 import QtGui,QtSql def start_prestige(): m_name = "Prestige" m_desc = "
为什么下面的代码打印的是 true 而不是 false? int main(int argc, char *argv[]) { QApplication a(argc, argv);
基于 Qt 文档: A connection can only be used from within the thread that created it. Moving connections b
我正在运行来自 http://www.python.org/getit/ 的 python 2.7.3 (python-2.7.3.amd64.msi) 我使用的安装程序来自:http://www.l
我正在使用 QSqlDatabase 并试图找到一种方法来终止正在运行的查询(这是我正在编写的 sql 客户端的一种必要功能) 有没有办法获取正在运行的查询的 ID? (计划只是在另一个连接中执行 k
很多QSqlDatabase的教程都是这样启动数据库的: QSqlDatabase cn = QSqlDatabase::addDatabase("QSQLITE",QString::number(i
我有一个 Qt 应用程序,它(本质上)使用 QSqlDatabase 创建一个 QMYSQL 数据库连接,创建一个 gridPopulator 实例来填充一个 QTableView 带有(显然)来自数
处理 QSqlDatabase 连接的正确方法是什么? 在我的程序中我是这样做的: DatabaseConnector *databaseConnector = 0; try { databa
我有依赖类和独立类,我需要在这些类中创建数据库连接。据我了解Qt documentation ,如果我以默认方式创建连接,则所有连接都使用相同的连接。 我应该为不同的类创建不同的数据库连接,还是应该使
我对手册感到困惑,我应该这样工作吗: { QSqlDatabase db = QSqlDatabase::addDatabase (...); QSqlQuery query (db); que
我有一个多年来一直运行良好的功能,开始 QSqlDatabase DBUtil :: basic_open (const QString & path) { static int connec
在我的开发电脑中,“QSqlDatabase ob”行不会崩溃并且工作得很好。但是在一台新的电脑上移动了 exe,它崩溃了,但是如果我注释上面的行并再次准备 exe,它就可以正常运行。 所以我在新电脑
我刚刚完成了 QT CRUD 应用程序的开发。我使用 SQLite 将信息本地存储在运行应用程序的磁盘中。这样我的应用程序就可以正常工作了。 但是该应用程序缺少中央数据库服务器。因此,我首先安装 My
将 Qt 从 5.5 更新到 5.6 后,QSqlDatabase:open 始终返回 true - 即使主机不可访问和/或用户名/密码/数据库设置设置为无意义。 测试代码: QSqlDatabase
文件对此只字不提。我只是想知道 exec() 调用是否阻塞?意思是,如果我先创建一个表,然后启动一个线程,在线程中我调用一个对我刚创建的表的查询。 是否有可能在实际建表之前调用查询? 最佳答案 是的,
我正在尝试使用 .open() 函数在 QT 中打开一个 sqlite 数据库文件,如果文件没有退出,.open() 不会返回 false,它只是在给定的位置创建一个新文件目录。我的代码: QSqlD
我正在做一个使用 QSqlDatabase 的项目。现在我正在使用 QtConcurrent (QFuture) 来执行任何 SQL 命令。 现在,使用 QFuture 运行的每个新命令都会创建新的
我是一名优秀的程序员,十分优秀!