利用ResultSetMetaData可以查询表格的列名称和类型,但是怎么生成一个类来存放这些信息?类似于Hibernate的反向工程。另外想要分的请留言,谢谢大家!

解决方案 »

  1.   

    不知道楼主想干什么ResultSetMetaData不就是你要的东东吗?不过是个接口,但不同数据库的jdbc会有实现类啊。
      

  2.   

    理论上来说是可以的,但是以你目前的水平你是不可能实现的。
    只要流对java的class文件有足够深的掌握,这种程度相当于你不需要源代码和字节码助记符,直接看class文件的二进制码能够勾勒出这个class相对应的java源代码,这是第一步。
    然后你能够通过表结构信息在脑海中形成java源代码,然后再通过你那个伟大大脑完成jdk的编译功能生产class文件的二进制码,再把这种二进制码书写到你的java源文件中以byte数组形式拼接处理,得到相当于用FileOutputStream读取一个.class文件所得到的byte数组一样,然后通过你自定义的类加载器加载到你的虚拟机中,那么恭喜你,你完成这个艰巨的任务了,你可以通过表结构动态生成一个类,然后生成对象完成对象映射。
    怎么样,很心动么?着手实现吧。
    如果你觉得上面的过程是你这辈子也做不到的事情,或者说你不愿意把你宝贵的人生浪费在这种愚蠢的事情上面的话,那么还有另外一个方式,那就用别人的一个通过以上方式实现的东西(你要相信这个世界上什么人都有的)cglib来完成,据说Hibernate是通过这个东西来完成的。
      

  3.   

        从实现上是没问题的,但从设计角度,这样做是不妥的。    领域对象是业务紧耦合的,数据库表是方便存取,数据层的良好设计需要考虑到很多因素,往往表结构会破坏业务结构而更好的支撑业务或者提供更好的性能扩展性,减小代码开发难度。
        
        所以这样的做法无疑肯定了表对象即业务对象,束缚了自己,类似于强制定制。这样的你做的东西肯定十分生涩。    hibernate orm 提供了map功能,是能够突破这种束缚,所以它能满足很多业务对象和表结构不一致的需求。并通过字节码编辑工具基于orm配置修改和增强 orm的Object,但这样的增强还只局限于数据的获取,还只是一个贫血对象,没有太多的业务色彩。
        如果你完全使用 ResultSetMetaData ,就完全失去了人为控制 orm 的机会。
      

  4.   

    to spiniper你的说法太极端了!即使就如你所说的这么说,也可以利用字节码编辑工具去修改,也不用达到对class文件一清二楚。cglib是hibernate的 orm 和 Spring的 AOP 实现工具包,还有一个很强大的字节码工具。JBOSS的 aop 实现工具包 javassist
      

  5.   


    目前在写个小模块,利用Swing显示数据库中的各个表格的内容,在根据用户选择不同的表名来把不同的表格内容存到本地磁盘。感觉不用领域对象JDBC代码写着不爽,所以想一下这个问题
      

  6.   


    jdbc写起来不爽,但能直接操作,控制起来爽啊,要什么有什么,i like it