关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

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

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 30360|回复: 5

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

[复制链接]
发表于 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;
    }

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

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

数据库配置:
用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写
发表于 2018-7-4 16:05:19 | 显示全部楼层
楼上正解,用了这个方法解决了
发表于 2022-3-13 02:29:48 | 显示全部楼层
lower_case_table_names can only be configured when initializing the server. Changing the lower_case_table_names setting after the server is initialized is prohibited.

以上为官方说明,目前已经不支持 lower_case_table_names=1 参数修改了,只有初始化数据库修改一条路。
而生产数据库呀,岂能随便初始化。
真是好大的一个坑,不知道jeecg里的表名为什么不能调整成小写呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表