如何在qsqlquery.exec中读取此qtstring

时间:2011-11-19 08:59:40

标签: c++ sql string sqlite

我正在学习qtsql但在qtsql :: query.exec()中遇到过这个qtstring

我以前在C ++中从未见过这个字符串。

有人可以解释为什么有很多报价吗?怎么读这个?这是一个字符串还是五个字符串?如果有五个字符串,为什么中间没有逗号分隔符? query.exec也期待一个const& QTstring。因此,如果这是一个字符串,是否与“create table person(id integer primary key,firstname varchar(20),lastname varchar(30),age integer)”相同?“

ret = query.exec("create table person "
              "(id integer primary key, "
              "firstname varchar(20), "
              "lastname varchar(30), "
              "age integer)");

提前致谢。


它没有编译,因为我收到此错误

[100%]构建CXX对象CMakeFiles / utest_main.dir / utest_main.cpp.o /Users/chen/GitRepo/TickDatabase/utest_main.cpp:在函数'int main()'中:/ Users / chen / GitRepo / TickDatabase / utest_main.cpp:25:错误:未在此范围内声明'firstname'/Users/chen/GitRepo/TickDatabase/utest_main.cpp:25:错误:未在此范围内声明'lastname'/ Users / chen / GitRepo / TickDatabase / utest_main.cpp:25:错误:'age'未在此范围中声明make [2]: * [CMakeFiles / utest_main.dir / utest_main.cpp.o]错误1 make [1]: * [CMakeFiles / utest_main.dir / all]错误

但它看起来也不像是一个错误,因为这两个网站都引用了这种语法:

http://www.developer.nokia.com/Community/Wiki/CS001505_-_Creating_a_database_table_in_Qt

http://doc.qt.nokia.com/stable/sql-cachedtable.html

有人有任何想法吗?

2 个答案:

答案 0 :(得分:1)

如果两个字符串文字只用空格分隔,那么它们会连接成一个字符串。如果我没弄错的话,这是C和C ++标准的一部分。

修改可以找到C的标准here。相关部分是第6.4.5节(恰当地命名为“字符串文字”),第4段。我引用:

  

在翻译阶段6中,指定的多字节字符序列   任何相邻字符序列和宽字符串文字标记都是   连接成一个多字节字符序列。

在第7段后面他们有一个例子:

  

示例这对相邻的字符串文字

"\x12" "3"
     

生成包含两个字符串的单个字符串文字   值为'\ x12'和'3'的字符,因为转义序列   只是转换为执行字符集的单个成员   在相邻的字符串文字串联之前。

C ++标准中应该有相似的文字,但我还没有,所以不能说哪个部分。

编辑2 查看问题中的错误,我会说在真实来源的某处有一个缺失或额外的双引号"

答案 1 :(得分:0)

这是一个单独的字符串,表示"create table person (id integer primary key, firstname varchar(20), lastname varchar(30), age integer)"。但是你可以看到它进入一条线太长了。因此,使用""(打开/引用结束引号)将其拆分为多个字符串。在这种情况下,您可以在代码中的字符串内使用换行符以提高其可读性。如果您不插入这些字符并使用换行符拆分字符串,则代码将无法编译。