Generator 报错

pom 依赖  连的是SQL SERVER 2008 R2

com.alibabadruid1.0.27net.sourceforge.jtdsjtds1.3.1
DruidPlugin () {
    DruidPlugin(PropKit.().trim()PropKit.().trim()PropKit.().trim()PropKit.().trim())}

从DruidPlugin获取到conn 能使用jdbc 读取到数据,所以连数据库是没问题的,只是下面的 Generator 报错,我觉的应该是设置方言就能解决问题,可是从DruidPlugin里好像是没有设置方言的地方,报错如下。

Build TableMeta ...
三月 11, 2017 11:19:08 上午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
Skip table :dtproperties
Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: '`' 附近有语法错误。
    at com.jfinal.plugin.activerecord.generator.MetaBuilder.build(MetaBuilder.java:102)
    at com.jfinal.plugin.activerecord.generator.Generator.generate(Generator.java:217)
    at com.jikeapi.config._JFinalDemoGenerator.main(_JFinalDemoGenerator.java:72)
Caused by: java.sql.SQLException: '`' 附近有语法错误。
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2988)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2421)
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:671)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:505)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1427)
    at com.alibaba.druid.pool.DruidPooledStatement.executeQuery(DruidPooledStatement.java:140)
    at com.jfinal.plugin.activerecord.generator.MetaBuilder.buildColumnMetas(MetaBuilder.java:221)
    at com.jfinal.plugin.activerecord.generator.MetaBuilder.build(MetaBuilder.java:97)
    ... 2 more
Disconnected from the target VM, address: '127.0.0.1:54915', transport: 'socket'

评论区

JFinal

2017-03-11 11:28

生成器设置方言用一下:generator.setDialect(...)

对于 sqlserver 来说,生成的时候可能会碰到一点问题,参考一下这个贴子:http://www.jfinal.com/share/211

hmgx

2017-03-15 10:06

@JFinal 您好,是通过设置SQL SERVER 的方言是可以,但是一个新的问题又出现了,SQL 数据库有好多系统表,而且没有主键,还有视图也会自动生成 也是没有主键所以 最终没有生成。是不是目前自动生成不支持SQL SERVER ?

JFinal

2017-03-15 11:24

@hmgx 自动生成支持 sql server,只是有些细节没有照顾到,但是生成器是面象扩展设计的,可以随心所欲去扩展细节功能

没有主键的问题:jfinal active record 模式的基本要求就是一个 model 唯一对应一条数据库记录,而这个对应关系必须依赖于主键,所以使用 model 必须要有主键。否则就根本不是 active record 模式的范畴。对于无主键的表不要去生成 Model,可以用一下 Db + Record 模式

生成器的 addExcludedTable(tableName) 可以排除一些不需要生成的表,或者通过扩展 MetaBuilder 覆盖 isSkipTable 方法,随心所欲地去控制要跳过哪些表不生成

热门反馈

扫码入社