日期:2014-05-19  浏览次数:20651 次

如何获取数据库字段对应的表名?
我是这样写的:
Java code

// sql语句
String sql = "select a.*, b.* from table1 a, table2 b";
// 链接数据库
Connection conn = MySqlConnection.getConnection();
PreparedStatement ps = (PreparedStatement) conn
        .prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
                ResultSet.CONCUR_READ_ONLY);
ResultSet rs = ps.executeQuery();

// 获取数据
while (rs.next()) {
    
    for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
        // 存放数据,以“表.字段”形式
        System.out.println(rs.getMetaData().getTableName(i) + "."
                + rs.getMetaData().getColumnLabel(i));
    }
    
}


结果是mysql数据库可以正常的取得表名。可是sqlserver等数据库却无法取得,不知道原因在哪里,我又应该怎么写?

------解决方案--------------------
1.不清楚楼主为何有这样的需求,程序在编译期仍然不知道表和表结构??楼主难道没将数据表做成持久化模型?
2.第二步似乎不用做PreparedStatement的强制类型转换。
3.sqlServer和mysql在一些操作上确实有区别,比如desc table、show tables,都不能在sqlserver上使用,所以我觉得楼主想要在运行期探查数据库表结构,这种方法似乎不怎么好。
------解决方案--------------------
探讨
1.不清楚楼主为何有这样的需求,程序在编译期仍然不知道表和表结构??楼主难道没将数据表做成持久化模型?
2.第二步似乎不用做PreparedStatement的强制类型转换。
3.sqlServer和mysql在一些操作上确实有区别,比如desc table、show tables,都不能在sqlserver上使用,所以我觉得楼主想要在运行期探查数据库表结构,这种方法似乎不怎么好。

------解决方案--------------------
探讨
1.不清楚楼主为何有这样的需求,程序在编译期仍然不知道表和表结构??楼主难道没将数据表做成持久化模型?
2.第二步似乎不用做PreparedStatement的强制类型转换。
3.sqlServer和mysql在一些操作上确实有区别,比如desc table、show tables,都不能在sqlserver上使用,所以我觉得楼主想要在运行期探查数据库表结构,这种方法似乎不怎么好。