设为首页收藏本站

JEECG官方网站-企业级JAVA快速开发平台

 找回密码
 立即注册

关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 最新动态 - 技术支持 - 师徒架构班

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务 QQ: 3102411850、418799587 商务热线: 18611788525 客服电话: 010-64808099 官方邮箱: jeecgos@163.com

查看: 6720|回复: 4

[代码生成器] 表在数据库中不存在

[复制链接]

4

主题

0

好友

51

积分

注册会员

Rank: 3Rank: 3

发表于 2016-5-1 21:56:09 |显示全部楼层
我的开发环境:jeecg3.6.3, tomcat7,jdk7,mysql5.5.49
jeecg搭建起来,运行,创建单表,生成代码出错,报错:表在数据库中不存在
跟踪jeecg,发现,在生成代码是,要现检验表在数据库中是存在的,检验的方法是检索information_scheam中的记录,查找指定的表是否存在,但是jeecg在构建的sql语句中,将要检索的表名称做toUpperCase()处理,结果,没有找到指定的表。
jeecg中检验表是否存在的源码如下:
public boolean checkTableExist(String tableName)
    {
        try
        {
            System.out.println((new StringBuilder()).append("\u6570\u636E\u5E93\u9A71\u52A8: ").append(CodeResourceUtil.DIVER_NAME).toString());
            Class.forName(CodeResourceUtil.DIVER_NAME);
            conn = DriverManager.getConnection(CodeResourceUtil.URL, CodeResourceUtil.USERNAME, CodeResourceUtil.PASSWORD);
            stmt = conn.createStatement(1005, 1007);
            if(CodeResourceUtil.DATABASE_TYPE.equals("mysql"))
                sql = (new StringBuilder()).append("select column_name,data_type,column_comment,0,0 from information_schema.columns where table_name = '").append(tableName.toUpperCase()).append("'").append(" and table_schema = '").append(CodeResourceUtil.DATABASE_NAME).append("'").toString();
            if(CodeResourceUtil.DATABASE_TYPE.equals("oracle"))
                sql = (new StringBuilder()).append("select colstable.column_name column_name, colstable.data_type data_type, commentstable.comments column_comment from user_tab_cols colstable  inner join user_col_comments commentstable  on colstable.column_name = commentstable.column_name  where colstable.table_name = commentstable.table_name  and colstable.table_name = '").append(tableName.toUpperCase()).append("'").toString();
            if(CodeResourceUtil.DATABASE_TYPE.equals("postgresql"))
                sql = MessageFormat.format("SELECT a.attname AS  field,t.typname AS type,col_description(a.attrelid,a.attnum) as comment,null as column_precision,null as column_scale,null as Char_Length,a.attnotnull  FROM pg_class c,pg_attribute  a,pg_type t  WHERE c.relname = {0} and a.attnum > 0  and a.attrelid = c.oid and a.atttypid = t.oid  ORDER BY a.attnum ", new Object[] {
                    TableConvert.getV(tableName.toLowerCase())
                });
            if(CodeResourceUtil.DATABASE_TYPE.equals("sqlserver"))
                sql = MessageFormat.format("select cast(a.name as varchar(50)) column_name,  cast(b.name as varchar(50)) data_type,  cast(e.value as varchar(200)) comment,  cast(ColumnProperty(a.object_id,a.Name,'''Precision''') as int) num_precision,  cast(ColumnProperty(a.object_id,a.Name,'''Scale''') as int) num_scale,  a.max_length,  (case when a.is_nullable=1 then '''y''' else '''n''' end) nullable   from sys.columns a left join sys.types b on a.user_type_id=b.user_type_id left join sys.objects c on a.object_id=c.object_id and c.type='''U''' left join sys.extended_properties e on e.major_id=c.object_id and e.minor_id=a.column_id and e.class=1 where c.name={0}", new Object[] {
                    TableConvert.getV(tableName.toLowerCase())
                });
            rs = stmt.executeQuery(sql);
            rs.last();
            int fieldNum = rs.getRow();
            if(fieldNum > 0)
                return true;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return false;
        }
        return false;
    }

419

主题

31

好友

1万

积分

管理员

Rank: 12Rank: 12Rank: 12

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 荣誉管理 JEECG团队成员

发表于 2016-5-3 09:26:43 |显示全部楼层
代码生成器的配置文件修改 了吗?再确认链接的是本地库,还是远程库
专业解答JEECG疑难杂症,JEECG常见问题汇总在:http://t.cn/RvYsEF6
回复

使用道具 举报

3

主题

0

好友

72

积分

注册会员

Rank: 3Rank: 3

发表于 2017-4-11 10:38:52 |显示全部楼层
admin 发表于 2016-5-3 09:26
代码生成器的配置文件修改 了吗?再确认链接的是本地库,还是远程库

如果是远程库的话有哪里要改的吗
回复

使用道具 举报

0

主题

0

好友

23

积分

新手上路

Rank: 2

发表于 2017-8-24 19:24:29 |显示全部楼层
因为表名做了tableName.toUpperCase()处理,需要确认一下mysql数据库是否设置了大小写敏感

数据库配置:
用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写
回复

使用道具 举报

0

主题

0

好友

19

积分

新手上路

Rank: 2

发表于 2018-7-4 16:05:19 |显示全部楼层
楼上正解,用了这个方法解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|JEECG官方网站-企业级JAVA快速开发平台 ( 京ICP备12013567号-3 )  

GMT+8, 2019-3-23 14:46 , Processed in 1.248002 second(s), 20 queries , Gzip On.

JEECG Open Source

© 2001-2012 Comsenz Inc.

回顶部