需要使用java从sql查询中获取元数据



我有一个sql查询,我需要它的列名和数据类型,以及它的表名和模式名:

这是我在SQLSERVER:中使用和测试它的方法

public static void getMetadataForConn(Connection conn) throws SQLException
    {
        ResultSet rs = null;
         try
         {
             Statement stmt = conn.createStatement();
             rs = stmt.executeQuery("SELECT AB_DEMO_SRC.dbo.employee.dept_id dept_id, AB_DEMO_SRC.dbo.employee.email_add email_add, AB_DEMO_SRC.dbo.employee.emp_address emp_address, AB_DEMO_SRC.dbo.employee.emp_id emp_id, AB_DEMO_SRC.dbo.employee.emp_name emp_name FROM AB_DEMO_SRC.dbo.employee ");
             ResultSetMetaData md = rs.getMetaData();
             int columnCount = md.getColumnCount();
             for (int i = 1; i <= columnCount; i++)
                 System.out.print(md.getColumnName(i) + "(" + md.getColumnType(i) + ") "+md.getSchemaName(i)+"."+md.getTableName(i));
             System.out.println();
             while (rs.next())
             {
                 for (int i = 1; i <= columnCount; i++)
                 {
                     Object o = rs.getObject(i);
                     System.out.print(null == o ? "" : o.toString() + " ");
                 }
                 System.out.println();
             }
            }
            finally
            {
                if (null != rs)
                {
                    rs.close();
                }
            }
    }

我得到了所有其他元数据的详细信息,如数据类型、精度和规模。。奇怪的是,我得到的表名和模式名是空白的"。。是否有其他方法可以获取查询中列的元数据?

我认为问题在于ResultSet的列与任何表都不相关,它们只与查询相关。查询可能很复杂,可能有计算列等。这就是为什么它们的表名为空的原因。

如果您想获得有关特定表的列的信息,可以使用数据库的元数据:

DatabaseMetaData meta = conn.getMetaData();
ResultSet columns = meta.getColumns(null, "dbo", "employee", null);

您可以通过调用ResultSet的"getMetaData"方法来获取列名。

ResultSetMetaData metaData= resultSet.getMetaData();
String columnName = metaData.getColumnName(1);

所有其他列元数据也可以使用ResultSetMetaData 的对象获取

相关内容

  • 没有找到相关文章

最新更新