2

JDBCTemplateとインメモリデータベースを使用する単体テストがあります。私のHSQLDB設定は次のとおりです。

jdbc.driver.className=org.hsqldb.jdbcDriver
jdbc.url=jdbc\:hsqldb\:mem\:test;DB_CLOSE_DELAY\=-1
jdbc.username=sa
jdbc.password=

テーブルを作成し、新しいレコードを挿入する前に、JDBCTemplateを介してテーブルにデータが存在するかどうかを確認しようとしています。

以下のように、JDBCTemplateを介してJDBCクエリを呼び出しています。

String query = "select id from Person where id=?";
int isExist = jdbcTemplate.update(query, "1");

私のconfigxmlでは、dataSourceを次のように配線しました。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" lazy-init="default" autowire="default">
    <property name="driverClassName" value="${jdbc.driver.className}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

次のようなエラーが発生します:

org.hsqldb.HsqlException : statement does not generate a row count

メモリデータベースを削除して実際にOracleデータベースに接続した場合も同じコードが機能しますが、テストの場合はメモリデータベースで必要です。

手伝ってもらえますか?

ありがとう

4

1 に答える 1

4

JdbcTemplate.queryこのメソッドを使用する必要があります。このupdateメソッドは、挿入/削除/更新ステートメント用です。例えば:

int isExist = jdbcTemplate.queryForInt(query, "1");
于 2012-11-14T15:15:07.033 に答える