4

我正在尝试在 IBM AS400 上的 jetty-7.6.3 上运行 Grails 网络应用程序。当我这样做时,我得到一个错误,归结为:

Caused by: 
java.sql.SQLException: INTERNAL ERROR:  Creation of DB2Driver object for registering with DriverManager failed. -> com.ibm.db2.jdbc.app.DB2JDBCDataException: CCSID value is not valid.
at com.ibm.db2.jdbc.app.DB2ErrorDriver.throwSavedExceptions(DB2ErrorDriver.java:113)
at com.ibm.db2.jdbc.app.DB2ErrorDriver.handleURLProcessing(DB2ErrorDriver.java:296)
at com.ibm.db2.jdbc.app.DB2ErrorDriver.acceptsURL(DB2ErrorDriver.java:149)
at java.sql.DriverManager.getDriver(DriverManager.java:386)
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:224)
at $Proxy16.getMetaData(Unknown Source)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:285)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:320)
at org.codehaus.groovy.grails.orm.hibernate.support.SpringLobHandlerDetectorFactoryBean.afterPropertiesSet(SpringLobHandlerDetectorFactoryBean.java:72)
...

如果有帮助,我可以提供更多的堆栈跟踪。

这是我的数据源:

dataSource{
  dbCreate = "update"
  pooled = true
  url = "jdbc:db2:*local;naming=system;libraries=LIBV;errors=full"
  driverClassName = "com.ibm.db2.jdbc.app.DB2Driver"
  username = "user"
  password = "pass"
  dialect = org.hibernate.dialect.DB2400Dialect.class
}  

我不知道从哪里开始,也不知道哪个文件的 CCSID 错误。我查看了我的网络应用程序的所有文件,它们似乎很好。有什么建议么?

4

1 回答 1

4

我不是 Grails 程序员,但我熟悉 IBM i。IBM 支持文档29290926指出不允许使用 CCSID 65535。

几十年前,当没有 CCSID 时,已售出并安装了相当多的中端机器。随着操作系统的发展,引入了 CCSID(编码字符集 ID)的概念。当这种情况发生时,升级到新版本操作系统的人被分配了一个默认的 CCSID:65535。CCSID 65535 实际上表示“我不知道你的文件是如何编码的”。实际上,所有文件都被视为二进制数据,如 JPG 或 EXE 文件。

当时的建议是不允许使用默认值,而是分配一个描述实际编码的 CCSID。我在美国的地方,CCSID 是 37 - 美国英语。有一个称为 QCCSID 的系统值将在系统范围内设置此值。另一种方法是更改​​所涉及的用户配置文件。 CHGUSRPRF username CCSID(37)

于 2013-03-07T19:41:38.420 回答