- - PR -
JUnit + DbUnitについて
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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は更新されません。 説明不足かもしれませんが、よろしくお願いいたします。 | ||||
|
投稿日時: 2004-01-12 00:15
はじめまして。
ちょっと情報が少ないので的確なアドバイスにならないとは思いますが・・・ まず、データベースの接続先はどうなっていますか? 接続しているデータベースにmessageテーブルはありますか? messageテーブルには、message_1, message_2列がありますか? DatabaseConnectionを作成している周辺のソースと例外のメッセージを もうちょっと開示して頂けると、何か分かるかもしれません。 | ||||
|
投稿日時: 2004-01-12 00:20
return new FlatXmlDataSet(new FileReader"data.xml"))の箇所が return new FlatXmlDataSet(new FileReader("data.xml"))と括弧が一つ足りないのでは ないでしょうか? | ||||
|
投稿日時: 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 "." と出ることです。 なにかお気づきの点がありましたらよろしくお願いいたします。 | ||||
|
投稿日時: 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); } 上のように変更したら、どうなりますか? | ||||
|
投稿日時: 2004-01-13 19:48
toshi様ご返答ありがとうございます。
return new DatabaseConnection(conn); に変更したところうまくいくことができました。 なぜ、雑誌の引用ではだめだったのか調べてみたいと思います。 ありがとうございました。 | ||||
1
