UCASE 和 UPPER sql 函数
UCASE and UPPER sql functions
我正在尝试执行以下查询:
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 列的值。我不明白发生了什么。
您只是在比较大写值,但您选择的是 select *
的实际值
要在结果集中获取大写名称,您需要在 select 列表中使用 UPPER,而不是 UCASE,如下所示:
String query = "SELECT UPPER(LAST_NAME) AS UPPERNAME, * FROM EMP WHERE UPPER(LAST_NAME) ";
query += "LIKE '" + lastName.toUpperCase() + "%'";
您的代码在这里所做的是构建一个名为 query
的查询字符串。一旦query
完成后,将被发送到数据库进行解析和运行ning。
当您构建对数据库的查询时,您必须对数据库要解析的查询部分使用内置的数据库函数,运行。因此,在您的示例中,Java 在 lastName
上执行 toUpperCase
,然后将该文字放入将转到数据库的查询字符串中。 UPPER(LAST_NAME)
按原样进入查询字符串,它将像那样传递到数据库,并由数据库 运行 传递。所以它需要是一个数据库可以解析的函数和运行:一个Oracle函数,而不是Java函数。
UCASE 是 DB2 函数而不是 Oracle。对于 Oracle,您需要使用 UPPER
。
James Z 已经回答了你问题的第二部分。
话虽如此,我回答是因为之前的回答没有指出 SQL 您列出查询的方式存在注入问题。
养成总是使用 jdbc 执行参数化查询的习惯,而不是直接将值附加到查询字符串。
String query = "SELECT * FROM EMP WHERE UCASE(LAST_NAME) LIKE ? ";
您的参数将是 - lastName.toUpperCase()+"%"
SQL Injection
我正在尝试执行以下查询:
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 列的值。我不明白发生了什么。
您只是在比较大写值,但您选择的是 select *
要在结果集中获取大写名称,您需要在 select 列表中使用 UPPER,而不是 UCASE,如下所示:
String query = "SELECT UPPER(LAST_NAME) AS UPPERNAME, * FROM EMP WHERE UPPER(LAST_NAME) ";
query += "LIKE '" + lastName.toUpperCase() + "%'";
您的代码在这里所做的是构建一个名为 query
的查询字符串。一旦query
完成后,将被发送到数据库进行解析和运行ning。
当您构建对数据库的查询时,您必须对数据库要解析的查询部分使用内置的数据库函数,运行。因此,在您的示例中,Java 在 lastName
上执行 toUpperCase
,然后将该文字放入将转到数据库的查询字符串中。 UPPER(LAST_NAME)
按原样进入查询字符串,它将像那样传递到数据库,并由数据库 运行 传递。所以它需要是一个数据库可以解析的函数和运行:一个Oracle函数,而不是Java函数。
UCASE 是 DB2 函数而不是 Oracle。对于 Oracle,您需要使用 UPPER
。
James Z 已经回答了你问题的第二部分。
话虽如此,我回答是因为之前的回答没有指出 SQL 您列出查询的方式存在注入问题。
养成总是使用 jdbc 执行参数化查询的习惯,而不是直接将值附加到查询字符串。
String query = "SELECT * FROM EMP WHERE UCASE(LAST_NAME) LIKE ? ";
您的参数将是 - lastName.toUpperCase()+"%"
SQL Injection