查询未在HSQLDB中运行

时间:2012-09-14 13:07:54

标签: java spring jdbc hsqldb

我正在使用HSQLDB进行JUNIT测试。

有一个查询不是在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数据源时失败,此查询运行完美。

如果我将String更改为

,它也会在HSQL中运行
public static final String ORG_CODE_QUERY = "SELECT org.name as ORG_CODE" +
         "  FROM " + ORGANIZATION  + " org " +
         " WHERE org.id   = ? " +
         "   AND org.industry = ?  ";

遗憾的是无法更改生产代码。

我收到以下错误:

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

如果此问题出现转机,请与我们联系。

由于 Avnish

1 个答案:

答案 0 :(得分:2)

HSQL does not support您在Sybase SQL查询中使用的SELECT <alias> = <column definition>语法。

您需要查找适用于两个数据库系统的查询版本,或者在类中包含某种类型的开关,以便在使用HSQL时使用Sybase和HSQL语法时执行Sybase语法。