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;

猜你喜欢

转载自yugouai.iteye.com/blog/1473164