Spring-Hibernate应用程序中的列名异常无效

时间:2015-11-25 05:12:33

标签: java spring oracle hibernate

我正在使用一个使用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中执行时,相同的查询正在给出预期的输出。我不明白为什么我会出现这种差异

2 个答案:

答案 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 );