QtSql:QSqlRecord不保留表前缀

Vee*_*eti 4 c++ qt

我正在使用Qt中的一个小应用程序,我正在使用SQL库和SQLite作为数据库.到目前为止,这已经很好了.的QSqlQuery类只提供了一种通过获取列值的方法的索引,而不是字段名称.但是,使用该record()函数可以将查询中的当前行转换为a QSqlRecord,其具有value()按字段名称获取值的功能.

所以,这很好,并允许我编写更短更清晰的代码,但像下面这样的连接查询会带来问题:

SELECT t1.*, t2.* FROM table1 AS t1, table2 AS t2 WHERE t1.table2_id=t2.id
Run Code Online (Sandbox Code Playgroud)

因此我们正常执行此查询,并将行转换为记录.但事实证明,其中的列名QSqlRecord不以表名为前缀 - 例如,id在记录对象中有两列被调用.这显然有点问题.

什么是这个问题的最佳解决方案?

(我在Qt bug跟踪器中发现了这个问题,但它没有多大帮助.)

Gia*_*nni 6

字段名称完全取决于驱动程序; 所以这个问题确实存在于SQLite本身,毕竟它可能正在做"正确"的事情(正确的,就像SQL标准,我还没有检查过).

无论如何,简单的解决方案:只是在SQL本身中为您的字段添加别名,但是,您不能,也不应该使用select * from:

SELECT t1.id TI_ID, t1.name TI_NAME, t2.id T2_ID FROM table1 AS t1, table2 AS t2 WHERE t1.table2_id=t2.id
Run Code Online (Sandbox Code Playgroud)