[seasar-dotnet:1739] [DBFlute.NET]jdbcタスクでExceptionが発生します

taknb2nch [E-MAIL ADDRESS DELETED]
2010年 6月 18日 (金) 21:23:59 JST


久保 さん


こんにちは、はぎの です。


DBFlute.NET-0.8.9.17、0.9.8.18-01-SNAPSHOTにてjdbcタスクでExceptionが発生します。

0.8.9.16では発生しないので、
0.8.9.16から0.8.9.17間の変更が何か影響していると思うのですがいかがでしょうか。


ログは以下のとおりです。

2010-06-18 20:10:50,156 [main] INFO
(DfDBFluteTaskUtil#getBuildProperties():82) - ...Using
contextProperties: build.properties
2010-06-18 20:10:50,156 [main] INFO
(DfDBFluteTaskUtil#getBuildProperties():125) - [Build-Properties]:
size=1
2010-06-18 20:10:50,171 [main] INFO
(DfDBFluteTaskUtil#getBuildProperties():127) -   torque.project =
dfclient
2010-06-18 20:10:50,171 [main] INFO
(DfDBFluteTaskUtil#getBuildProperties():129) -
2010-06-18 20:10:50,203 [main] INFO  (DfDataSourceHandler#create():72)
- ...Creating data source:
2010-06-18 20:10:50,203 [main] INFO  (DfDataSourceHandler#create():73)
-   driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
2010-06-18 20:10:50,203 [main] INFO  (DfDataSourceHandler#create():74)
-   url    = jdbc:sqlserver://localhost:1433;DatabaseName=XxxxxXxxxxxxXX
2010-06-18 20:10:50,203 [main] INFO  (DfDataSourceHandler#create():75)
-   user   = sa
2010-06-18 20:10:50,218 [main] INFO
(DfDataSourceHandler#createConnection():161) - ...Connecting to the
database:
2010-06-18 20:10:50,546 [main] INFO
(DfDataSourceHandler#processConnectionMetaInfo():215) -   product =
Microsoft SQL Server 9.00.3068
2010-06-18 20:10:50,546 [main] INFO
(DfDataSourceHandler#processConnectionMetaInfo():216) -   driver  =
Microsoft SQL Server JDBC Driver 2.0 2.0.1803.100 for JDBC 4.0
2010-06-18 20:10:50,562 [main] INFO
(TorqueJDBCTransformTask#doExecute():176) -
2010-06-18 20:10:50,562 [main] INFO
(TorqueJDBCTransformTask#doExecute():177) - ...Starting to process
JDBC to SchemaXML
2010-06-18 20:10:50,562 [main] INFO
(TorqueJDBCTransformTask#doLoadPreviousSchema():969) - ...Loading
previous schema (schema diff process)
2010-06-18 20:10:50,578 [main] INFO  (DTDResolver#resolveEntity():123)
- ...Resolving XML by database.dtd in same package
2010-06-18 20:10:50,656 [main] INFO
(TorqueJDBCTransformTask#generateXML():229) - ...Instantiate DB-driver
2010-06-18 20:10:50,656 [main] INFO
(TorqueJDBCTransformTask#generateXML():232) - ...Getting DB-connection
2010-06-18 20:10:50,656 [main] INFO
(TorqueJDBCTransformTask#generateXML():235) - ...Getting DB-meta-data
2010-06-18 20:10:50,656 [main] INFO
(DfTableHandler#doGetTableList():68) - ...Getting tables:
2010-06-18 20:10:50,671 [main] INFO
(DfTableHandler#doGetTableList():69) -   schema = {xxxxxxxxxxxxxx.dbo
as main}
2010-06-18 20:10:50,671 [main] INFO
(DfTableHandler#doGetTableList():70) -   types  = [TABLE, VIEW]
2010-06-18 20:10:50,718 [main] ERROR
(DfDBFluteTaskUtil#logException():156) - Look! Read the message below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Failed to execute DBFlute Task 'JDBC'.

[Advice]
Check the exception messages and the stack traces.

[Database Product]
Microsoft SQL Server 9.00.3068

[JDBC Driver]
Microsoft SQL Server JDBC Driver 2.0 2.0.1803.100 for JDBC 4.0
* * * * * * * * * */
java.lang.IllegalStateException:
com.microsoft.sqlserver.jdbc.SQLServerException:
オブジェクト修飾子の一部になるデータベース名には、現在のデータベースを指定してください。
	at org.apache.torque.task.TorqueJDBCTransformTask.doExecute(TorqueJDBCTransformTask.java:210)
	at org.seasar.dbflute.task.bs.DfAbstractTask.execute(DfAbstractTask.java:91)
	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
	at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
	at org.apache.tools.ant.Task.perform(Task.java:348)
	at org.apache.tools.ant.Target.execute(Target.java:357)
	at org.apache.tools.ant.Target.performTasks(Target.java:385)
	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
	at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
	at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
	at org.apache.tools.ant.Main.runBuild(Main.java:698)
	at org.apache.tools.ant.Main.startAnt(Main.java:199)
	at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
	at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException:
オブジェクト修飾子の一部になるデータベース名には、現在のデータベースを指定してください。
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454)
	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388)
	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
	at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQueryInternal(SQLServerPreparedStatement.java:294)
	at com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.getResultSetFromStoredProc(SQLServerDatabaseMetaData.java:275)
	at com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.getResultSetWithProvidedColumnNames(SQLServerDatabaseMetaData.java:291)
	at com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.getTables(SQLServerDatabaseMetaData.java:441)
	at org.seasar.dbflute.logic.jdbc.handler.DfTableHandler.doGetTableList(DfTableHandler.java:73)
	at org.seasar.dbflute.logic.jdbc.handler.DfTableHandler.getTableList(DfTableHandler.java:59)
	at org.apache.torque.task.TorqueJDBCTransformTask.getTableNames(TorqueJDBCTransformTask.java:535)
	at org.apache.torque.task.TorqueJDBCTransformTask.generateXML(TorqueJDBCTransformTask.java:238)
	at org.apache.torque.task.TorqueJDBCTransformTask.doExecute(TorqueJDBCTransformTask.java:188)
	... 17 more

以下は省略。


都合上データベース名は伏せさせていただいてます。
※伏字Xの大文字・小文字はそれぞれ実際の大文字・小文字に対応させています。

接続文字列の部分は大文字小文字の区別があるのに、
schema = {xxxxxxxxxxxxxx.dbo as main}の部分はすべて小文字になっているのが少しだけ気になりました。
0.8.9.16ではschema={XxxxxXxxxxxxXX.dbo as main} と大小区別されています。

ログをざーとみて気になったのはこのくらいです。
(まったく関係なかったらすいません)




--
いろいろ検証しながらここまで書いて原因がわかりました!!
折角なので書いた部分は残しておきます。


データベースの照合順序が起因しているようです。

Japanese_CI_AI等であれば問題ないのですが、
(0.8.9.17、0.9.8.18-01-SNAPSHOTいずれもOK)
KS、BIN、BIN2等だとダメなようです。
(おそらく大小を区別するもの、すいません、すべては検証できていません)


もしかすると
(DBFLUTE-712){Java/C#}: SQLServerで接続URLの大文字小文字の違い吸収
の何かが影響しているのではないかと思います。



実行環境
DB:SQLServer2005 SP2
DBFlute:0.8.9.17、0.9.8.18-01-SNAPSHOT



ご確認よろしくお願いいたします。


seasar-dotnet メーリングリストの案内