我正在尝试执行以下查询:
String query = "SELECT * FROM EMP WHERE UCASE(LAST_NAME) ";
query += "LIKE '" + lastName.toUpperCase() + "%'";
在使用servlet访问数据库的示例中 但我收到错误消息:
Excepcion java.sql.SQLSyntaxErrorException: ORA-00904: "UCASE": invalid identifier
另一方面,当我使用UPPER sql函数时,该示例有效,但结果不会以大写形式显示LASTNAME列的值。我不明白会发生什么。
答案 0 :(得分:3)
您只是比较大写字母值,但是您使用probeid genename sample1 sample2 sample3 ....n
1565483_at EGFR 4.231305 3.845882 4.182973
1565484_x_at EGFR 4.412553 4.279467 4.035834
201983_s_at EGFR 4.24823 4.304888 7.686607
201984_s_at EGFR 5.273041 4.914405 6.332343
210984_x_at EGFR 4.591761 4.807462 5.830411
211550_at EGFR 3.822476 4.055447 3.668374
211551_at EGFR 4.082551 3.825106 4.292482
211607_x_at EGFR 4.774399 4.566751 5.694684
224999_at EGFR 4.059136 4.307745 7.19947
201746_at TP53 7.847832 4.011214 7.834738
211300_s_at TP53 7.043846 4.881257 7.619734
答案 1 :(得分:1)
要获得结果集中的大写名称,您需要在选择列表中使用UPPER,而不是UCASE,如下所示:
String query = "SELECT UPPER(LAST_NAME) AS UPPERNAME, * FROM EMP WHERE UPPER(LAST_NAME) ";
query += "LIKE '" + lastName.toUpperCase() + "%'";
您的代码在这里做的是构建一个名为query
的查询字符串。一旦query
完成,它将被发送到数据库进行解析和运行。
在构建对数据库的查询时,必须使用内置数据库函数来处理数据库要解析和运行的部分查询。因此,在您的示例中,Java正在toUpperCase
上执行lastName
,然后将该文本放入将转到数据库的查询字符串中。 UPPER(LAST_NAME)
按原样进入查询字符串,它将像这样传递到数据库并由数据库运行。所以它需要是一个数据库可以解析和运行的函数:Oracle函数,而不是Java函数。
答案 2 :(得分:1)
UCASE是DB2函数,而不是Oracle。对于Oracle,您需要使用UPPER
。
您的问题的第二部分已经由James Z回答了。
话虽如此,我之所以要回答,是因为先前的回答并未指出您列出查询方式的SQL注入问题。
养成始终使用jdbc执行参数化查询的习惯,而不是直接将值附加到查询字符串中。
String query = "SELECT * FROM EMP WHERE UCASE(LAST_NAME) LIKE ? ";
您的参数应为-lastName.toUpperCase()+"%"