snake168
snake168
2010-04-13 10:39

上班两个月了,遇到一个很难以理解的设计,需求是:为了统一管理数据库(??我是没理解),做法是把数据库的列名写在java文件中,我感觉很不可思议

已采纳

具体做法是这样的,把现在的数据库表名,列名都写在一个java文件中,像

public static final String 表名+列名
这样,然后全部sql语句都统一引用该文件中的语句
(这里有一点小弟必须声明一下,该软件只是一个应用软件,所以都是用拼字符串来写sql的,这个做法好与坏暂且不讨论)。然后我问该设计者
:为什么这样做,是针对什么需求这样做的?

:为了以后维护,统一管理起数据库,如果你有什么想法,你可以说看看(我是听得很奇怪,感觉模棱两可的,硬是没了解这需求是什么)

按小弟的理解,这样的做法唯一的好处,就是以后表名列名改了,sql语句不用改,但是坏处是可想而知的,所有名字定义在文件中,那写sql的效率会慢了多少倍?维护数据库的同时,又要维护该java文件。看以前写的sql,根本就看不懂,别说修改了……

反正小弟是无法接受这种做法,是否有朋友能指教一下,让小弟接受,或者告诉小弟怎样去说服该设计者(也就是小弟的上司),谢谢了
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • iteye_20144 iteye_20144 11年前

    低调点吧,兄弟
    我在上家公司也想改变什么
    但在你没得到肯定之前那是不可能的
    管它怎样,按原来的搞呗
    =上面发现问题的你再说该怎么高吧

    点赞 评论 复制链接分享
  • aninfeel aninfeel 11年前

    还可以防止拼写错误。

    点赞 评论 复制链接分享
  • Angel_Night Angel_Night 11年前

    [quote]效率呢,大哥,小弟写sql,一向都是在sql gui窗口中写,复制,粘贴,然后顺便一查,又验证了sql语句,但是这样做呢? [/quote]

    效率必然会低一些 当不至于太多
    你sql的where条件总还需要拼接吧 只不过多了表名 和 列名...

    而且 有哥们不是说了么..做成数组
    写个工具类封装一下(然后让他输出sql 你复制到gui中试一下) 不见得慢多少

    [quote]再问问这位兄弟什么情况会产生数据库的表名,列名的改变,结构却不改变?
    情况很多么?起码网上搜不到这样的情况解决方案,我也没听说过
    [/quote]

    网上怎么能搜到这种东西呢...
    我们公司有一个小团队就是改代码的...(公司做电子政务)
    把一个单位的网站改成另外一个单位 地税换交管 业务名称变的多 实际流程大变动的不多..而且表结构这种东西用工具类是可以生成的..改改就是了


    事没有绝对 心态要调整

    技术选型是你的职责所在吗?
    如果是 你完全可以换掉或者修改成你喜欢的
    如果不是 公司可能更希望看到的是 给什么任务都用的起来的员工

    有很多情况底层员工是不了解的 也许这些情况决定了一些事.

    点赞 评论 复制链接分享
  • Angel_Night Angel_Night 11年前

    [quote]没尝试过这痛苦的人啊
    ~你去写写,改改就知道了,一按“.”,出来的是一页页的
    其实小弟当时没想反驳他,就写了正则表达式匹配的方法去解析sql语句,然后通过按规则拼接,反射回来得到该字符串(因为都是final static,这反射性能应该不慢),但是方法不太通用,只能兼容比较少部份的sql关键字,而且也不敢写通用,多人用了要是出现大bug负不起责 [/quote]

    那按照表建类啊...
    或者按照模块划分类啊

    难道非得划分在一个.java中么

    我以前开发 所有的struts跳转 都是用类似的方法实现的..
    包括struts2本身其实也有类似的功能啊..

    设计是通的...

    点赞 评论 复制链接分享
  • Angel_Night Angel_Night 11年前

    [quote]
    [code="java"]String sql = "select count(*) from " + TPDBConstants.DB_TABLE_4_BTP_2_MIB_RELATIONSHIP + "," + TPDBConstants.DB_TABLE_4_BTP_USED_MIB_TABLE + " where "
    + TPDBConstants.DB_TABLE_4_BTP_2_MIB_RELATIONSHIP + "." + TPDBConstants.DB_BTP_2_MIB_RELATIONSHIP_4_BTP_2_MIB_ID + " = "
    + TPDBConstants.DB_TABLE_4_BTP_USED_MIB_TABLE + "." + TPDBConstants.DB_BTP_USED_MIB_TABLE_4_BTP_2_MIB_ID + " and "
    + TPDBConstants.DB_BTP_2_MIB_RELATIONSHIP_4_OID_NAME + " is not null and " + TPDBConstants.DB_BTP_2_MIB_RELATIONSHIP_4_BTP_MAIN_TABLE_ID
    + " is not null and " + TPDBConstants.DB_TABLE_4_BTP_USED_MIB_TABLE + "." + TPDBConstants.DB_BTP_USED_MIB_TABLE_4_BTP_MIB_TABLE_ID + " = '"
    + BTP_MIB_TABLE_ID + "'";
    [/code]
    [/quote]

    这段代码这么读 肯定没法读

    但是在eclipse或者其他ide中
    这些变量有注释的话 移上去读起来应该比读纯字符串拼接要容易吧?

    点赞 评论 复制链接分享
  • lyw985 lyw985 11年前

    事实上,我个人觉得这个想法还是有点意思

    通常我会在service层定义,类似于这样

    [code="java"]
    public class BeanService implements IBeanService {
    public final static String TABLENAME = "bean";
    public final static String PKCOLUMN = "pk_id";
    public final static String[] COLUMNS = { "pk_id", "bean_id", "can_show",
    "withdrawn" };
    public final static String[] EXPLAINS = { "主键ID", "实体类id", "是否可见", "是否废弃" };
    ...............
    }
    [/code]

    但是写在一起,我倒是没考虑过

    点赞 评论 复制链接分享
  • Angel_Night Angel_Night 11年前

    [quote]为了以后维护,统一管理起数据库[/quote]

    说的很有理啊..
    单用jdbc 没有规则约束 那代码如何维护

    [quote]按小弟的理解,这样的做法唯一的好处,就是以后表名列名改了,sql语句不用改,但是坏处是可想而知的,所有名字定义在文件中,那写sql的效率会慢了多少倍?[/quote]

    好处你理解的很对
    坏处[color=red]完全[/color]不存在...建议深入学习java基础...

    [quote]维护数据库的同时,又要维护该java文件。看以前写的sql,根本就看不懂,别说修改了……[/quote]

    按照我的理解 你们领导的想法 这个java文件 就代替数据库文档了
    你以后修改数据库 不用改文档么?
    让我选 我也愿意改java代码 至少ide中有注释

    [quote]反正小弟是无法接受这种做法,是否有朋友能指教一下,让小弟接受,或者告诉小弟怎样去说服该设计者(也就是小弟的上司),谢谢了[/quote]

    你需要明确几点..
    你才入职两个月.
    不要想着改变公司已有的东西..没资格 也没能力..
    就好像我们公司ssh都快要退出时代了..我们还在用纯jsp开发...
    改变? 现在开发得好好的 没遇到什么问题 换ssh能带来什么?
    你们领导还不错
    对于这种问题 居然用 "如果你有什么想法,你可以说看看" 可见是个好领导..要珍惜

    点赞 评论 复制链接分享

相关推荐