JDBC读取数据库字段属性
由于项目需要,需要从一张表中的数据复制到另一张表中。
本来是打算使用Hibernate的O/R映射,因为Hibernate能够将JavaBean映射成数据库表,现在把这个过程逆转过来,将数据库表反映射成JavaBean,在网上找了很多资料,貌似没太详细的说明,如果大家有这方面的资料,请留言,大家讨论,这可能是一个比较难的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,不过应该可以解决,这里征求一下大家的实现
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
。
由于使用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;