jfinal如何配置使用DB2数据库

方向导数 发布于 2013/01/18 11:34
阅读 2K+
收藏 1

我使用jfinal_demo_for_jsp在缺省数据库Mysql下正常,修改配置使用DB2出现问题。修改如下:

数据库系统为DB2 v9.7,建立了数据库名JFINAL,建立了表blog,模式为JFINAL。

a_little_config.txt内容:

driverClass =com.ibm.db2.jcc.DB2Driver
jdbcUrl = jdbc:db2://localhost:50000/JFINAL
user = db2admin
password = Pbc12345
devMode = true

DemoConfig.java中修改的内容:

 public void configPlugin(Plugins me) {
  C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password").trim(), getProperty("driverClass"));
  
  me.add(c3p0Plugin);
  
  arp.setDialect(new AnsiSqlDialect()); 
  me.add(arp);

  arp.addMapping("JFINAL.BLOG", Blog.class); 
 }

 运行jetty出错信息如下:

Starting scanner at interval of 5 seconds.
Can not build TableInfo, maybe the table JFINAL.BLOG is not exists.

2013-01-18 11:49:14
[ERROR]-[Thread: main]-[com.jfinal.core.Config.startPlugins()]: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin
com.jfinal.plugin.activerecord.ActiveRecordException: com.ibm.db2.jcc.am.ro: DB2 SQL Error: SQLCODE=-551, SQLSTATE=42501, SQLERRMC=DB2ADMIN;SELECT;JFINAL.BLOG, DRIVER=3.58.82
 at com.jfinal.plugin.activerecord.TableInfoBuilder.buildTableInfo(TableInfoBuilder.java:49)
 at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:106)
 at com.jfinal.core.Config.startPlugins(Config.java:78)
 at com.jfinal.core.Config.configJFinal(Config.java:48)
 at com.jfinal.core.JFinal.init(JFinal.java:65)
 at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:48)
 at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)
 at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
 at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)
 at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
 at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
 at org.mortbay.jetty.Server.doStart(Server.java:224)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at com.jfinal.server.JettyServer.doStart(JettyServer.java:153)
 at com.jfinal.server.JettyServer.start(JettyServer.java:82)
 at com.jfinal.core.JFinal.start(JFinal.java:160)
 at com.demo.common.DemoConfig.main(DemoConfig.java:85)
Caused by: com.ibm.db2.jcc.am.ro: DB2 SQL Error: SQLCODE=-551, SQLSTATE=42501, SQLERRMC=DB2ADMIN;SELECT;JFINAL.BLOG, DRIVER=3.58.82
 at com.ibm.db2.jcc.am.ed.a(ed.java:676)
 at com.ibm.db2.jcc.am.ed.a(ed.java:60)
 at com.ibm.db2.jcc.am.ed.a(ed.java:127)
 at com.ibm.db2.jcc.am.tm.c(tm.java:2523)
 at com.ibm.db2.jcc.am.tm.d(tm.java:2511)
 at com.ibm.db2.jcc.am.tm.a(tm.java:1991)
 at com.ibm.db2.jcc.t4.fb.g(fb.java:140)
 at com.ibm.db2.jcc.t4.fb.a(fb.java:40)
 at com.ibm.db2.jcc.t4.t.a(t.java:32)
 at com.ibm.db2.jcc.t4.ub.i(ub.java:135)
 at com.ibm.db2.jcc.am.tm.fb(tm.java:1962)
 at com.ibm.db2.jcc.am.tm.a(tm.java:2981)
 at com.ibm.db2.jcc.am.tm.a(tm.java:652)
 at com.ibm.db2.jcc.am.tm.executeQuery(tm.java:636)
 at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
 at com.jfinal.plugin.activerecord.TableInfoBuilder.doBuildTableInfo(TableInfoBuilder.java:61)
 at com.jfinal.plugin.activerecord.TableInfoBuilder.buildTableInfo(TableInfoBuilder.java:44)
 ... 20 more

2013-01-18 11:49:14
[WARN]-[Thread: main]-[org.mortbay.log.Slf4jLog.warn()]: failed jfinal: java.lang.RuntimeException: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin

2013-01-18 11:49:14
[ERROR]-[Thread: main]-[org.mortbay.log.Slf4jLog.warn()]: Failed startup of context org.mortbay.jetty.webapp.WebAppContext@a9255c{/,WebRoot}
java.lang.RuntimeException: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin
 at com.jfinal.core.Config.startPlugins(Config.java:86)
 at com.jfinal.core.Config.configJFinal(Config.java:48)
 at com.jfinal.core.JFinal.init(JFinal.java:65)
 at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:48)
 at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)
 at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
 at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)
 at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
 at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
 at org.mortbay.jetty.Server.doStart(Server.java:224)
 at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
 at com.jfinal.server.JettyServer.doStart(JettyServer.java:153)
 at com.jfinal.server.JettyServer.start(JettyServer.java:82)
 at com.jfinal.core.JFinal.start(JFinal.java:160)
 at com.demo.common.DemoConfig.main(DemoConfig.java:85)
Caused by: com.jfinal.plugin.activerecord.ActiveRecordException: com.ibm.db2.jcc.am.ro: DB2 SQL Error: SQLCODE=-551, SQLSTATE=42501, SQLERRMC=DB2ADMIN;SELECT;JFINAL.BLOG, DRIVER=3.58.82
 at com.jfinal.plugin.activerecord.TableInfoBuilder.buildTableInfo(TableInfoBuilder.java:49)
 at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:106)
 at com.jfinal.core.Config.startPlugins(Config.java:78)
 ... 18 more
Caused by: com.ibm.db2.jcc.am.ro: DB2 SQL Error: SQLCODE=-551, SQLSTATE=42501, SQLERRMC=DB2ADMIN;SELECT;JFINAL.BLOG, DRIVER=3.58.82
 at com.ibm.db2.jcc.am.ed.a(ed.java:676)
 at com.ibm.db2.jcc.am.ed.a(ed.java:60)
 at com.ibm.db2.jcc.am.ed.a(ed.java:127)
 at com.ibm.db2.jcc.am.tm.c(tm.java:2523)
 at com.ibm.db2.jcc.am.tm.d(tm.java:2511)
 at com.ibm.db2.jcc.am.tm.a(tm.java:1991)
 at com.ibm.db2.jcc.t4.fb.g(fb.java:140)
 at com.ibm.db2.jcc.t4.fb.a(fb.java:40)
 at com.ibm.db2.jcc.t4.t.a(t.java:32)
 at com.ibm.db2.jcc.t4.ub.i(ub.java:135)
 at com.ibm.db2.jcc.am.tm.fb(tm.java:1962)
 at com.ibm.db2.jcc.am.tm.a(tm.java:2981)
 at com.ibm.db2.jcc.am.tm.a(tm.java:652)
 at com.ibm.db2.jcc.am.tm.executeQuery(tm.java:636)
 at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
 at com.jfinal.plugin.activerecord.TableInfoBuilder.doBuildTableInfo(TableInfoBuilder.java:61)
 at com.jfinal.plugin.activerecord.TableInfoBuilder.buildTableInfo(TableInfoBuilder.java:44)
 ... 20 more

 

加载中
1
JFinal
JFinal

引用来自“方向导数”的答案

你是说自己建一个db2的dialect?
可以使用 AnsiSqlDialect, arp.setDialect(new AnsiSqlDialect()),只要支持ANSI SQL标准的数据库,这个方言都支持
1
tonyfox
tonyfox
@方向导数 @jfinal  我按这个配置DB2的,没有问题,至少登录demo可以实现,复杂的查询还没试
0
缪斯的情人
缪斯的情人
目前没有提供db2的适配器插件,你可以自己做扩展,jfinal很方便扩展
0
方向导数
你是说自己建一个db2的dialect?
0
方向导数

引用来自“JFinal”的答案

引用来自“方向导数”的答案

你是说自己建一个db2的dialect?
可以使用 AnsiSqlDialect, arp.setDialect(new AnsiSqlDialect()),只要支持ANSI SQL标准的数据库,这个方言都支持
我就是这样用的了,但报错问题不知何故?
JFinal
JFinal
可能是db2有些语句没有遵守ANSI SQL标准,你自己做一个 Db2Dialect extends AnsiSqlDialect,覆盖掉里面出错的方法即可
0
方向导数

引用来自“方向导数”的答案

引用来自“JFinal”的答案

引用来自“方向导数”的答案

你是说自己建一个db2的dialect?
可以使用 AnsiSqlDialect, arp.setDialect(new AnsiSqlDialect()),只要支持ANSI SQL标准的数据库,这个方言都支持
我就是这样用的了,但报错问题不知何故?

现在的问题是启动jetty就已经报错了,还没有到操作数据库的阶段。应该是在处理

arp.addMapping("JFINAL.BLOG", Blog.class);

就出错了。

 

JFinal
JFinal
将arp.addMapping("JFINAL.BLOG", Blog.class); 改为arp.addMapping("BLOG", Blog.class);
0
方向导数

改为arp.addMapping("BLOG", Blog.class);试过了,也报错,错误信息不同而已(红色部分)。

2013-01-18 14:31:38
[ERROR]-[Thread: main]-[com.jfinal.core.Config.startPlugins()]: Plugin start error: com.jfinal.plugin.activerecord.ActiveRecordPlugin
com.jfinal.plugin.activerecord.ActiveRecordException: com.ibm.db2.jcc.am.ro: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2ADMIN.BLOG, DRIVER=3.58.82
 at com.jfinal.plugin.activerecord.TableInfoBuilder.buildTableInfo(TableInfoBuilder.java:49)
 at com.jfinal.plugin.activerecord.ActiveRecordPlugin.start(ActiveRecordPlugin.java:106)

 

JFinal
JFinal
在Db2Dialect中重写一下 forTableInfoBuilderDoBuildTableInfo()方法
0
方向导数
我用的是 AnsiSqlDialect,其中的  forTableInfoBuilderDoBuildTableInfo()方法如下,应该没有问题吧?
 public String forTableInfoBuilderDoBuildTableInfo(String tableName) {
  return "select * from " + tableName + " where 1 = 2";
 }
0
方向导数

在db2工具下执行

select * from JFINAL.BLOG where 1 = 2

能正确执行,且返回结果0。DB2工具会话结果:

------------------------------ 输入的命令 ------------------------------
select * from JFINAL.BLOG where 1 = 2
------------------------------------------------------------------------------
单个查询的结果显示在“查询结果”选项卡上。
成功地返回了 0 行。

 

 

0
方向导数
居然没人试过db2?
返回顶部
顶部