【问题标题】:Query not running in HSQLDB查询未在 HSQLDB 中运行
【发布时间】:2012-09-07 15:51:41
【问题描述】:

我正在使用 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;
            }
        });
    }

弹簧配置:

 <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 数据源传递时失败。

如果我如下更改字符串,它也可以在 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 

如果这个问题有好转,请告诉我。

谢谢 完成

【问题讨论】:

    标签: java spring jdbc hsqldb


    【解决方案1】:

    HSQL does not support 您在 Sybase SQL 查询中使用的 SELECT &lt;alias&gt; = &lt;column definition&gt; 语法。

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

    【讨论】:

    • 高版本的HSQL是否支持这个查询?尝试使用 HSQL 2.2.9,但无法注册驱动程序。根据文档,JDBC 驱动程序是 org.hsqldb.jdbc.jdbcDriver...谢谢
    • 我链接到了最新 HSQL 版本的文档。所以,没有。
    • 对于2.2.9,使用和之前一样的字符串(org.hsqldb.jdbcDriver)注册驱动。替代方案实际上是 org.hsqldb.jdbc.JDBCDriver 但可能不适用于某些第三方软件。
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多