如何通过ODBC从系统间缓存db获取数据
How to get data from intersystems cache db through ODBC?
这是我如何尝试从数据库获取数据:
#include <QCoreApplication>
#include <QtCore>
#include <QtSql>
#include "iostream"
int main(int argc, char *argv[])
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={InterSystems ODBC};SERVER=localhost;PORT=1972;DATABASE=USER;UID=_system;PWD=SYS; Unicode SQLTypes=1;");
if (!db.open())
{
std::cout << "Error opening database" << std::endl;
return -1;
}
else
{
QSqlQuery query;
if(query.exec("SELECT * FROM ACCOUNTS")){
std::cout << "Select succses!" << std::endl;
}
while (query.next())
{
std::cout << "Getting results..." << std::endl;
std::cout << query.value(0).toString().toStdString() << std::endl;
}
std::cout << "EXIT!" << std::endl;
return 0;
}
}
在query.exec(…)之后,query.next()总是false,但我真的知道表中有一个数据。当我试图从缓存数据库的样例表中获取数据时,这种行为会重现。我做错了什么?
谢谢你的帮助。
问题是连接配置错误:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={InterSystems ODBC};SERVER=localhost;PORT=1972;DATABASE=USER;UID=_system;PWD=SYS; Unicode SQLTypes=1;");
应该是:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3");
db.setDatabaseName("DRIVER={InterSystems ODBC35};SERVER=localhost;PORT=1972;DATABASE=USER;UID=_system;PWD=SYS; Unicode SQLTypes=1;");
[正如我在评论中所说的,我不熟悉这个API,只是在我回答时查看文档]
QSqlQuery构造函数的文档
使用SQL查询和数据库db构造一个QSqlQuery对象。如果没有指定db,或者是无效的,应用程序的默认值使用数据库。如果query不是空字符串,它将是空字符串执行。
这意味着你的查询是在默认数据库(不管这意味着什么)上打开的。
查看QSqlDatabase文档:
QSqlDatabase还支持默认连接的概念是未命名的连接。要创建默认连接,请不要在调用addDatabase()时传递连接名参数。
但是,您在addDatabase()中给出了一个名称参数:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
…这意味着它不是默认连接。
我猜你应该:
QSqlDatabase db = QSqlDatabase::addDatabase();
或
QSqlQuery query=QSqlQuery(db);
相关文章:
- cmake更新缓存的变量
- 试图对缓存进行跨步测试,但程序并没有结束
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 通过ccmake在cmake中缓存依赖选项
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 如何使缓存线程安全
- 存储指令是否会阻止缓存未命中的后续指令?
- 缓存局部性与函数调用
- Qt 网页程序集缓存
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- std::shared_ptr vs std::make_shared:意外的缓存未命中和分支预测
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- 多个 rocksdb 实例:使用单个共享缓存还是多个独立缓存?
- OLE DB 大容量复制操作始终将 true 加载到位列中
- 无法链接 LRU 缓存C++
- 空函数的参数是否加载到缓存中?
- 优化使用 C++ 查询 SQLite DB 中超过 5000 万条数据记录的方式
- 是否可以检查变量是否位于 L1/L2/L3 缓存中
- POST Arduino 传感器值通过 Flask API 发送到本地 Sqlite db
- 如何通过ODBC从系统间缓存db获取数据