我有一个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 的对象获取