2012-09-14 70 views
2

我正在使用HSQLDB進行JUNIT測試。查詢未在HSQLDB中運行

有一個查詢不在HSQL中執行,而是用Sybase驅動程序執行。 我正在使用Spring JDBC爲HSQLDB運行查詢和hsqldb.1.8.1.jar文件。

下面是代碼:

public static final String ORG_CODE_QUERY = "SELECT ORG_CODE = org.name " + 
     " FROM " + ORGANIZATION + " org " + 
     " WHERE org.id = ? " + 
     " AND org.industry = ? "; 


public List<String> getOrgCode(RequestPayload rqstPayload) { 
     return getJdbcTemplate().query(ORG_CODE_QUERY, new Object[]{rqstPayload.getId(),rqstPayload.getIndustry()}, new ResultSetExtractor<List<String>>() { 
      public List<String> extractData(ResultSet rs) throws SQLException { 
       List<String> list = new ArrayList<String>(); 
       while(rs.next()) { 
        list.add(rs.getString("ORG_CODE")); 
       } 
       return list; 
      } 
     }); 
    } 

Spring配置文件:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
     <property name="driverClass" value="org.hsqldb.jdbcDriver" /> 
     <property name="jdbcUrl" value="jdbc:hsqldb:mem:test" /> 
     <property name="user" value="sa" /> 
     <property name="password" value="" /> 
     <property name="minPoolSize" value="5" /> 
     <property name="maxPoolSize" value="10" /> 
    </bean> 

如果Sybase數據源傳遞給JdbcTemplate的,但是當HSQLDB數據源傳遞失敗,該查詢運行非常好。

如果我改變字符串如下

public static final String ORG_CODE_QUERY = "SELECT org.name as ORG_CODE" + 
     " FROM " + ORGANIZATION + " org " + 
     " WHERE org.id = ? " + 
     " AND org.industry = ? "; 

遺憾的是不能改變生產代碼也運行在HSQL。

我得到下面的錯誤:

Caused by: java.sql.SQLException: Column not found: ORG_CODE in statement 

請讓我知道是否有針對此問題出現轉機。

感謝 Avnish

回答

2

HSQL does not supportSELECT <alias> = <column definition>語法,您正在使用在Sybase SQL查詢。

您需要查找適用於兩個數據庫系統的查詢版本,或者在您的類中包含某種類型的開關,以便在使用Sybase時使用Sybase語法和在使用HSQL時使用HSQL語法。

+0

HSQL的高版本是否支持此查詢?嘗試使用HSQL 2.2.9,但無法註冊驅動程序。按照文檔JDBC驅動程序是org.hsqldb.jdbc.jdbcDriver ...謝謝 – user1671474

+0

我鏈接到最新的HSQL版本的文檔。所以不行。 –

+0

對於2.2.9,請使用與之前相同的字符串(org.hsqldb.jdbcDriver)來註冊驅動程序。替代方案實際上是org.hsqldb.jdbc.JDBCDriver,但可能不適用於某些第三方軟件。 – fredt