- PR -

JUnit + DbUnitについて

1
投稿者投稿内容
キリウム
会議室デビュー日: 2003/07/04
投稿数: 11
投稿日時: 2004-01-09 13:38
みなさんこんにちは。

DbUnitを試しているのですが、うまくいかず
投稿させていただきました。

xmlファイルを読み込む際、SQLExceptionが発生してしまいます。
protected IDataSet getDataSet() throws Exception {
 return new FlatXmlDataSet(new FileReader"data.xml"));
}

エラー
java.sql.SQLException: ERROR: parser: parse error at or near "."

data.xmlの内容
<dataset>
<message message_1='message1' message_2='message2'/>
</dataset>

<message message_1='message1' message_2='message2'/>
の部分を除くとエラーは消えます。

FlatXmlDataSet( をXmlDataSet(に変更するとエラーは出ないのですが、
DBは更新されません。

説明不足かもしれませんが、よろしくお願いいたします。
toshi
会議室デビュー日: 2002/03/07
投稿数: 10
お住まい・勤務地: 東京
投稿日時: 2004-01-12 00:15
はじめまして。

ちょっと情報が少ないので的確なアドバイスにならないとは思いますが・・・

まず、データベースの接続先はどうなっていますか?
接続しているデータベースにmessageテーブルはありますか?
messageテーブルには、message_1, message_2列がありますか?

DatabaseConnectionを作成している周辺のソースと例外のメッセージを
もうちょっと開示して頂けると、何か分かるかもしれません。
ちば
大ベテラン
会議室デビュー日: 2003/02/14
投稿数: 114
お住まい・勤務地: 都内勤務
投稿日時: 2004-01-12 00:20
引用:

キリウムさんの書き込み (2004-01-09 13:38) より:

xmlファイルを読み込む際、SQLExceptionが発生してしまいます。
protected IDataSet getDataSet() throws Exception {
 return new FlatXmlDataSet(new FileReader"data.xml"));
}




return new FlatXmlDataSet(new FileReader"data.xml"))の箇所が
return new FlatXmlDataSet(new FileReader("data.xml"))と括弧が一つ足りないのでは
ないでしょうか?
キリウム
会議室デビュー日: 2003/07/04
投稿数: 11
投稿日時: 2004-01-13 10:34
ちば様、toshi様、ご返答ありがとうございます。

toshi様のご指摘の通り、情報量が少なすぎました。
DBMagazineの2003年8月の特集を参考にしたコードです。

protected IDatabaseConnection getConnection() throws Exception {
Connection conn = DriverManager.getConnection(url,user,password);
return new DatabaseConnection(conn,conn.getMetaData().getUserName());
}
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSet(new FileReader("c:/usr/local/eclipse/workspace/ptss/WEB-INF/xUnitTest/data.xml"));
}

発生するエラーは次のようになります
java.sql.SQLException: ERROR: parser: parse error at or near "."
at org.postgresql.core.QueryExecutor.execute(Unknown Source)
at org.postgresql.Connection.ExecSQL(Unknown Source)
at org.postgresql.jdbc2.Statement.execute(Unknown Source)
at org.dbunit.database.statement.SimpleStatement.executeBatch(SimpleStatement.java:54)
at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:77)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:67)
at org.dbunit.DatabaseTestCase.executeOperation(DatabaseTestCase.java:84)
at org.dbunit.DatabaseTestCase.setUp(DatabaseTestCase.java:101)
at SampleTest.setUp(SampleTest.java:42)
at junit.framework.TestCase.runBare(TestCase.java:125)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167)

前述の通り、メソッド名を変えると例外は発生しませんが、DBも変わっていません。
xmlの<mess...を消すとFlatXmlのままでも通ります。
テーブルはちゃんと作成してあります。

気になるのはxmlファイルテーブル名を存在しない名前にすると(<message..を<messge..に変更)
org.dbunit.dataset.NoSuchTableException: messge
と出ますが、
コラム名を存在しない名前に変更しても
java.sql.SQLException: ERROR: parser: parse error at or near "."
と出ることです。

なにかお気づきの点がありましたらよろしくお願いいたします。
toshi
会議室デビュー日: 2002/03/07
投稿数: 10
お住まい・勤務地: 東京
投稿日時: 2004-01-13 17:38
おつかれさまです。

protected IDatabaseConnection getConnection() throws Exception {
 Connection conn = DriverManager.getConnection(url,user,password);
 //変更
 //return new DatabaseConnection(conn,conn.getMetaData().getUserName());
 return new DatabaseConnection(conn);
}

上のように変更したら、どうなりますか?
キリウム
会議室デビュー日: 2003/07/04
投稿数: 11
投稿日時: 2004-01-13 19:48
toshi様ご返答ありがとうございます。

return new DatabaseConnection(conn);
に変更したところうまくいくことができました。

なぜ、雑誌の引用ではだめだったのか調べてみたいと思います。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)