我正在使用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跟踪器中发现了这个问题,但它没有多大帮助.)
字段名称完全取决于驱动程序; 所以这个问题确实存在于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)