2014-11-22 105 views
0

我对MYSQL非常熟悉。现在,在IBM SQL DB(DB2)上尝试一个查询: “select HOMENAME =”+ password +“';选择查询DB2-SQL失败

这是我运行查询时得到的错误。

发生错误[IBM] [CLI驱动程序] [DB2/LINUXX8664] SQL0206N“USERNAME”在使用它的上下文中无效。 SQLSTATE = 42703

我重视我的表怎么看起来截图:DB Screenshot

+0

您可能需要检查名称。它应该是显示名称。 – zawhtut 2014-11-22 03:42:22

+0

谢谢指出。我正在用“displayname”运行我的查询,在这里写错了。任何想法为什么错误? – JavascriptL 2014-11-22 03:47:55

+0

如何使用表别名?即使这个看起来不错。没有使用模式名称怎么样。我以前从不使用bluemix,因此我不太了解如何在bluemix中运行查询。 – zawhtut 2014-11-22 03:51:58

回答

3

您的查询失败,因为DB2预计所有数据库对象默认要大写。非常如此,它会在执行前自动将您的查询中的小写字母名称转换为大写字母。

由于您的列名是小写字母,因此此查询失败。

我的建议是将您的列名转换为大写字母,因为从长远来看,这将为您节省很多痛苦。

但是,只需在查询中用双引号包装列名,DB2将保留正确的大小写,并且查询应该可以工作。

我相信这将工作: SELECT "displayname" FROM HOMEBASEDAPP.LOGINDB WHERE \"username\" = '" + username +"' AND \"password\" = '" + password +"';"

注:此处查询是非常不安全的,是开放的除其他事项外SQL注入攻击。希望你打算在你的应用中使用一个驱动程序,这将允许你“准备”你的查询并提供简单的传递值作为参数。

+1

错误。一般来说,SQL不区分大小写(作为标准的一部分),除非您在创建对象时明确将对象名设置为区分大小写。所以这可能会解决这个问题,但这只是因为安装首先被搞糟。 – 2014-11-24 13:42:00

+0

你错了。 DB2默认情况下区分大小写。此外,如果在特定情况下创建对象,则无法在查询中分隔对象名称将导致查询失败。我的回答被接受了,所以它显然是准确的。 – 2014-11-24 15:17:22

+0

没有。在列中搜索数据_contained_区分大小写。对象名称在查询时不区分大小写([这是由于它在创建过程中将所有内容都转换为大写](http://bytes.com/topic/db2/answers/473979-mixed-case-table-column-names) )。除非在创建过程中通过转义来限定对象名称,否则在这种情况下,您必须匹配您提供的任何内容(这通常是一种痛苦,因此建议不要这么做)。哦,你忘了逃避''displayname“的引号......' – 2014-11-24 22:04:51

0

你需要修改你的sql脚本,否则在发现第一次出现双引号时,db2会把它当作终止字符,我的意思是说查询将被执行到下面,这样你会得到错误:

http://www.justskins.com/forums/insert-with-double-quote-148522.html

DB2

你需要照顾双引号的全SQL查询的解析,下面是详细的样本参考链接“从HOMEBASEDAPP.LOGINDB其中username =“选择显示名称”

+0

这完全取决于他如何运行该声明。如果他使用的是Java,那么他给出的表单是有效的,以及你连接字符串的方式(......你不应该这样做,但这不是问题)。 – 2014-11-24 13:49:50