JDBC读取数据库字段属性

由于项目需要,需要从一张表中的数据复制到另一张表中。
本来是打算使用Hibernate的O/R映射,因为Hibernate能够将JavaBean映射成数据库表,现在把这个过程逆转过来,将数据库表反映射成JavaBean,在网上找了很多资料,貌似没太详细的说明,如果大家有这方面的资料,请留言,大家讨论,这可能是一个比较难的问题,不过应该可以解决,这里征求一下大家的实现方法。

由于使用Hibernate的方法实现不出来,只能使用最笨的方法:
1.新建一个与待拷贝的表属性一样的表,包括字段名、字段类型、大小等的属性,这里可以使用JDBC来实现,今天测试一下,可以使用两种方法
(1)使用SQL语句来读出数据库字段属性,然后把其转了javaBean,具体实现:

select column_name,data_type from information_schema.columns where table_name = '表名';

使用查询的方法把表结构读出来,然后讲字段名和类型组合成JavaBean,通过Hibernate生成新的数据库表,这里使用JDBC查询,这里的DBInfo是保存数据库字段信息的javaBean:

public List<DBInfo> getDBDesc() throws SQLException {
List<DBInfo> list = new ArrayList<DBInfo>();
Connection conn = DBInit.getConnection();
String sql = "select column_name,data_type,character_maximum_length from information_schema.columns where table_name = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "tb_bookinfo");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
DBInfo info = new DBInfo();
info.setColumnName(rs.getString(1));
info.setDataType(rs.getString(2));
info.setCharacterMaximumLength(rs.getInt(3));
list.add(info);
}
return list;
}

(2)使用java.sql.ResultSetMetaData来读取其表结构的属性,例如:

Connection conn = DBInit.getConnection();
String sql = "select *from tb_bookinfo";
ResultSetMetaData rsmd = null;
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
rsmd = rs.getMetaData(); // 获取字段名
if (rsmd != null) {
int count = rsmd.getColumnCount();
for (int i = 1; i <= count; i++) {
System.out.println("hyqTest======" + rsmd.getColumnName(i));
rsmd.getColumnType(i);
}


这样做真的很死板,希望能提供高效方法,谢谢各位网友!


我昨天头脑发烧了,实现上述功能直接用SQL语句就行了,SQL语句如下:

create table if not exists NewDBName.NewTBName select * from OldDBName.OldTBName;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值