0

データベースとして hsqldb を使用しています。データベースにデータを挿入するメソッド insertLmexPostParam(NameValuePostParamVO nameValuePostParamVO) を持つ LmexPostParamDao を作成します。このメソッドをテストするために、JUnit テストを使用して hsqldb にデータを挿入しました。

私のJUnitテスト方法は以下の通りです:

    @Test
public void testInsertLmexPostParam(){
    String lmexPostParamId = UUID.randomUUID().toString();
    NameValuePostParamVO nameValuePostParamVO = new NameValuePostParamVO();
    nameValuePostParamVO.setLmexPostParamId(lmexPostParamId);
    nameValuePostParamVO.setParamName("adapter_id");
    nameValuePostParamVO.setParamValue("7");

    lmexPostParamDao.insertLmexPostParam(nameValuePostParamVO);
}

私の挿入方法は以下の通りです:

    @Override
public void insertLmexPostParam(NameValuePostParamVO nameValuePostParamVO) {
    String insertQuery = "insert into LMEX_POST_PARAM(lmex_post_param_id, param_name, param_value) values (?,?,?)";
    String[] paramArr = { nameValuePostParamVO.getLmexPostParamId(), nameValuePostParamVO.getParamName(), nameValuePostParamVO.getParamValue()};
    int update = adapterJdbcTemplate.update(insertQuery, paramArr);
    System.out.println(update);
}

テストケースを実行すると、adapterJdbcTemplate の結果である出力として 1 が返されます。これは、データが正常に挿入されたことを意味します。しかし、データベースを見ると、挿入された行が表示されません。そして、同じ値でテストケースメソッドをデバッグすると、例外が発生します: データ整合性違反の例外。この例外の後、データベースが表示されると、データベースにその行が表示されます。何が問題になるでしょう。私はしません。コードを見ると、すべて問題ないように見えます。これを解決するのを手伝ってください。

ありがとうございました

4

1 に答える 1

0

LMEX_POST_PARAM の CREATE TABLE ステートメントを確認してください。CHAR および VARCHAR タイプは、挿入する値を受け入れるのに十分な大きさの N を使用して、CHAR(N) および VARCHAR(N) として定義する必要があります。たとえば、VARCHAR(100) です。

問題がデータベースに正常な挿入が表示されないことである場合は、WRITE_DELAY = 0 または false でデータベースを作成する必要があります。使用しているバージョンの HSQLDB ドキュメントを参照してください。

于 2011-03-09T12:11:09.070 に答える