QT多线程查询数据库显示到tablewidget里面

QT多线程查询数据库显示到tablewidget里面,第1张

1、线程内注册与连接数据库的竞争问题

文档上对多线程下数据库应用的注意事项写的很简明,一个线程创建的 QSqlDatabase 对象和 查出来的 QSqlQuery 对象只能给本线程用(注意,是对象,不是数据库连接本身,连接本身用名字可以多线程使用),其他情况是“不支持的”。在一个需要有几个线程并发访问不同数据库的应用中,我首先试图在各个线程的起始分别以不同的名称调用 addDatabase / database 、open,但是程序偶然会崩溃,跟踪后发现,虽然Qt 声称很多方法是“线程安全”的,但是几个方法串起来,就出问题了。Qt 会动态的加载数据库的plugin, 加载 plug in 的部分,涉及到对本地库文件的管理,这一部分,出现了竞争。于是,很自然的想到在初始连接部分设置 Mutex 保护,从 addDatabase / database到 open 的部分,要保证其原子性,问题再也没有出现。

2、数据库连接意外断裂后,恢复连接的问题

在MFC 中,一旦中途TCP连接断裂,直接重新 Open 就可以了。在Qt 里,这一招不好使了。即便 调用了 close ,再次open 也是不行的。处理方法:

在检测到问题出现后,关闭连接,并 removeDatabase; 而后,不要立刻 addDatabase, 反而是要回到该连接所在的事件循环。没有详细跟源码,很可能在 removeDatabase 后的事件循环中,Qt 内部做了一些释放 *** 作。 怎么办呢, 可以设置一个恢复定时器,比如 1分钟,重新 addDatabase,就可以啦。如果心急的话,直接显式调用processEvent() 方法强制循环。

在多线程下,注意1中的问题,需要 Mutex保护。

3、数据库插件的依赖性问题

在 Windows 下,有时我们的机器上按了好几个 Qt 版本,PATH里索性神马也不设置,依赖开发环境的继承环境适应不同的版本。这有两个问题。一是发布程序的时候,数据库驱动依赖的dll 也要与可执行文件在同一路径下发布。比如 mysql 的 dll, PostgreSQL 的依赖等。二是在集成开发环境中,这些依赖也要位于执行档文件夹下。否则,会造成虽然可以枚举到可用驱动,但是死活连接不上。调试一下就知道,原来是在路径中找不到依赖项,导致dll加载失败哦!

好像有一个函数是倒序,你查查具体是那一个函数,我用过一次,不过我不建议你这么写,不知道这是你的需求,还是你只是希望在数据多的时候看到最后一行,如果是后者,你可以定义滑块的为止,这样你就直接将数据定位到你最后一行,也是可以实现的,我开始用的是倒叙输出,但是这样设计有已缺陷就是,如果你在添加一个新的数据后,他刷新数据后,第一个数据依然在第一行,看的特别不舒服。希望对你有帮助

if(model->select())

{

//有数据

}else

{

QMessageBox::warning(this,tr("警告"),tr("找不到相符号码!"),QMessageBox::Yes);

}

qt creator怎么查询数据库内容:

U-boot中有一个用来保存很多有用信息的全局结构体 --gd_t(global data缩写),其中包括了bd变量,可以说gd_t结构体包括了u-boot中所有重要全局变量。最后传递给内核的参数,都是从gd和bd中来的,如上 述的setup_memory_tags函数的作用就是用bd中的值来初始化RAM相应的tag。

对于ARM平台这个结构体的定义大致如下:

include/asm-arm/global_datah

typedef struct global_data {

bd_t bd;

unsigned long flags;

unsigned long baudrate;

unsigned long have_console; / serial_init() was called /

unsigned long reloc_off; / Relocation Offset /

unsigned long env_addr; / Address of Environment struct /

unsigned long env_valid; / Checksum of Environment valid /

unsigned long fb_base; / base address of frame buffer /

void jt; / jump table /

} gd_t;

在U-boot中使用gd结构之前要用先用宏DECLARE_GLOBAL_DATA_PTR来声明。这个宏的定义如下:

include/asm-arm/global_datah

#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t gd asm ("r8")

从这个宏的定义可以看出,gd是一个保存在ARM的r8寄存器中的gd_t结构体的指针。

说明:本文的版本为U-boot-134、Linux-2628,平台是ARM。

以上就是关于QT多线程查询数据库显示到tablewidget里面全部的内容,包括:QT多线程查询数据库显示到tablewidget里面、QT软件 已经实现QTableVIew显示数据库表的内容,但是我想要倒着输出 该怎么弄、QT在数据库中查找数据,select()出来,怎么表示数据库中没有这个数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9356679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存