我正在使用一个使用Oracle 11G数据库的Spring Hibernate应用程序。我有一个表,我想从中选择三列并在jsp页面中显示它。现在,其中一列的数据格式为-abc + def + xyz。我必须显示" abc"," def"和" xyz"在我的jsp页面中的3个不同的列中。为此,我在DAO中编写了以下查询:
$scope.homeclicked = function() {
$scope.homechecked = true;
$scope.thebandchecked = false;
$scope.gallerychecked = false;
};
我的列的名称是 - TABLE_ID,TABLE_UID,USERID ,我的表名是 TABLE_TABLE1 。当我运行这个时,我得到了 -
SQLQuery query=sessionFactory.getCurrentSession().createSQLQuery("SELECT TABLE_ID, REGEXP_SUBSTR(TABLE_UID, '[^+]+', 1, 3) AS FIRST_COLUMN, REGEXP_SUBSTR(TABLE_UID, '[^+]+', 1, 2) AS SECOND_COLUMN, REGEXP_SUBSTR(TABLE_UID, '[^+]+', 1, 1) AS THIRD_COLUMN, USERID FROM TABLE_TABLE1 WHERE USERID='abhi'");
但是在SQL中执行时,相同的查询正在给出预期的输出。我不明白为什么我会出现这种差异
答案 0 :(得分:0)
我怀疑[或]角色提出问题(不确定)。相反,您可以尝试使用占位符
String queryString= "SELECT TABLE_ID, REGEXP_SUBSTR(TABLE_UID, ?, 1, 3) AS FIRST_COLUMN, REGEXP_SUBSTR(TABLE_UID, ?, 1, 2) AS SECOND_COLUMN, REGEXP_SUBSTR(TABLE_UID, ?, 1, 1) AS THIRD_COLUMN, USERID FROM TABLE_TABLE1 WHERE USERID= ?";
SQLQuery query = getSession().createSQLQuery(queryString);
query.setString(0, "[^+]+");
query.setString(1, "[^+]+");
query.setString(2, "[^+]+");
query.setString(3, "abhi");
答案 1 :(得分:-1)
可能是因为你没有逃脱特殊字符。如果使用org.apache.commons.lang.StringEscapeUtils
。它有一种方法:
public static String escapeSql(String str);
将String中的字符转义为适合传递给SQL查询。请参阅java doc
在你的情况下,它可以是:
String escaped = StringEscapeUtils.escapeSql("SELECT TABLE_ID, REGEXP_SUBSTR(TABLE_UID, '[^+]+', 1, 3) AS FIRST_COLUMN, REGEXP_SUBSTR(TABLE_UID, '[^+]+', 1, 2) AS SECOND_COLUMN, REGEXP_SUBSTR(TABLE_UID, '[^+]+', 1, 1) AS THIRD_COLUMN, USERID FROM TABLE_TABLE1 WHERE USERID='abhi'");
SQLQuery query=sessionFactory.getCurrentSession().createSQLQuery(escaped );