如何根据数据库的字段动态创建实体类? 用java啊~ 最好给点源码和实例

必须是两张或两张以上有主外键关联的表,问题采纳后追加大量分数

你这个需求特殊,给你个思路。
先通过数据库元数据对象DataBaseMetaData和ResultSetMetaData得到表的元数据的信息。
生成类,可以用反射的方式和修改字节码的方式。修改字节码方式可以使用开源的CGLib这个库,Hibernate就是使用的这个库。这个生成是在内存的。

估计,将java代码写成.java文件,再调用编译器编译形成class也能完成需求。
就是不知道哪个适合你。效率上,肯定是上面两种好,最后一种差一些。追问

能给个实例么? 我现在正准备用你说的前两个方法 但是 需要判断的东西不能一次从数据库中取出来,需要开关数据库好几次。希望能给个实例,谢谢

追答

取什么信息不能一次取出来啊?
我现在没有符合你需求的代码!
你先弄弄试试!~看看有什么问题,在根据具体问题,我来帮你。

追问

CGLib这个库能将实体类创建到本地么?

追答

创建实体类到本地应该不行的。如果要创建文件,那就要我说的第三种方式了。但是可以完成如下的工作。就是在内存中创建某一个已经存在的类的子类,然后在这个类中添加方法和成员变量,形成一个Java对象。
不知道你的需求是否是程序处理就可以,如果程序处理可以,那么久不需要生成文件,只要生成对象,由程序下一步处理就可以。但是如果说你要实现和MyEclipse一样的一个反向工程的代码生成工具的话,那就需要通过IO方式将代码生成.java文件,再使用Runtime.getRuntime().exec()去执行javac.exe进行代码编译才行。

创建实体类到本地应该不行的。如果要创建文件,那就要我说的第三种方式了。但是可以完成如下的工作。就是在内存中创建某一个已经存在的类的子类,然后在这个类中添加方法和成员变量,形成一个Java对象。
不知道你的需求是否是程序处理就可以,如果程序处理可以,那么久不需要生成文件,只要生成对象,由程序下一步处理就可以。但是如果说你要实现和MyEclipse一样的一个反向工程的代码生成工具的话,那就需要通过IO方式将代码生成.java文件,再使用Runtime.getRuntime().exec()去执行javac.exe进行代码编译才行。

创建实体类到本地应该不行的。如果要创建文件,那就要我说的第三种方式了。但是可以完成如下的工作。就是在内存中创建某一个已经存在的类的子类,然后在这个类中添加方法和成员变量,形成一个Java对象。
不知道你的需求是否是程序处理就可以,如果程序处理可以,那么久不需要生成文件,只要生成对象,由程序下一步处理就可以。但是如果说你要实现和MyEclipse一样的一个反向工程的代码生成工具的话,那就需要通过IO方式将代码生成.java文件,再使用Runtime.getRuntime().exec()去执行javac.exe进行代码编译才行。

追问

..... DataBaseMetaData和ResultSetMetaData 这个 方法现在我弄出来了 但是 挑数据库,不知道为啥 有的表 无法获取里面的外建,表肯定没有问题 。

追答

你是如何获取外键信息的,代码调用的是哪个方法?

追问

rs = meta.getExportedKeys(conn.getCatalog(), null, tablename);
while (rs.next()) {
String fkTableName = rs.getString("FKTABLE_NAME");
String fkColumnName = rs.getString("FKCOLUMN_NAME");
}

追答

你用的是什么数据库啊?表有没有Schema啊?

追问

mysql

追答

rs = meta.getExportedKeys(conn.getCatalog(), null, tablename);
你把第一个参数写成null试一试。
rs = meta.getExportedKeys(null, null, tablename);

追问

试过了‵~~ 不好用啊

追答

你看看能不能进到while里。
是连while都进不去?是没查到信息,还是取的问题?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-11
不知道你这个问题解决没有,我现在也遇到这样一个问题,有没有能成形的例子可以测试,谢谢[email protected]
第2个回答  2011-03-15
如果你用eclipse开发的话,安装个hibernate tools插件就可以了,可以直接生成映射文件和实体类追问

这个我也知道 项目需求 必须自己写 不能用插件~

追答

参考下这篇文章,http://qinya.javaeye.com/blog/726466 ,通过jdbc取表结构,然后反射生成实体类

追问

这个东西我查到了~~ 但是 关联表的情况下 不好弄啊 ~

相似回答
大家正在搜