此问题与问题https://stackoverflow.com/questions/3362965/problem-with-ddlutils-in-oracle-10g类似。由于我的问题(或者至少我认为是)与提到的问题略有不同,我发布了一个新问题。
我使用的是DdlUtils-1.0,Java-6(OpenJdk),ojdbc6.jar和Oracle 11.1.0。迁移由ant任务启动。任务看起来像这样:
<target name="dump-db" description="Dumps DB" depends="">
<taskdef name="databaseToDdl" classname="org.apache.ddlutils.task.DatabaseToDdlTask">
<classpath>
<path refid="runtime-classpath"/>
<path refid="project-classpath"/>
</classpath>
</taskdef>
<databaseToDdl modelname="${modelname}" verbosity="DEBUG" databasetype="${source.platform}"
usedelimitedsqlidentifiers="true" tabletypes="TABLE" schemapattern="${schemapattern}">
<database url="${source.url}"
driverClassName="${source.driver}"
username="${source.username}"
password="${source.passwd}"
initialsize="5"
testonborrow="true"
testonreturn="true"/>
<writeschemasqltofile failonerror="false" outputfile="${out.dir}/${schema.file.sql}"/>
<writedtdtofile outputfile="${out.dir}/${schema.file.dtd}"/>
<writeSchemaToFile failonerror="false" outputFile="${out.dir}/${schema.file.xml}"/>
<writedatatofile failonerror="false" outputfile="${out.dir}/${data.file.xml}" determineschema="true"/>
</databaseToDdl>
</target>
$ {source.platform}设置为'oracle10',因为ddlutils不支持oracle11。创建模式定义非常有效,但在转储数据时,我面临以下异常:
[databaseToDdl] org.apache.ddlutils.model.ModelException:未知的JDBC类型代码2007 [databaseToDdl] at org.apache.ddlutils.model.Column.setTypeCode(Column.java:215) [databaseToDdl] at org.apache.ddlutils.platform.JdbcModelReader.readColumn(JdbcModelReader.java:781) [databaseToDdl] at org.apache.ddlutils.platform.oracle.Oracle8ModelReader.readColumn(Oracle8ModelReader.java:117) [databaseToDdl] at org.apache.ddlutils.platform.JdbcModelReader.readColumns(JdbcModelReader.java:755) [databaseToDdl] at org.apache.ddlutils.platform.JdbcModelReader.readTable(JdbcModelReader.java:565) [databaseToDdl] at org.apache.ddlutils.platform.oracle.Oracle8ModelReader.readTable(Oracle8ModelReader.java:102) [databaseToDdl] at org.apache.ddlutils.platform.oracle.Oracle10ModelReader.readTable(Oracle10ModelReader.java:80) [databaseToDdl] at ...
在http://download.oracle.com/javase/6/docs/api/constant-values.html#java.sql.Types.BIT中列出了jdbc类型代码。显然ddlutils从jdbc驱动程序获取此类型代码,但在java.sql.Types中找不到相应的类型。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
5年后,这已经很晚了 无论如何,以后对于少数人来说可能会有所帮助。
访问:org.apache.ddlutils.model.TypeMap
方法:getJdbcTypeName(int typeCode)
写小逻辑,将2007设置为12
即;
if(typeCode == 2007){
typeCode = java.sql.Types.VARCHAR;
}
问题:TypeMapping in DdlUtils, is done with exisitinf java.sql.Types enum. Whereas, for the Oracle11g, the are few extra types. Hence issue raised.
希望它有所帮助。