如何使用Java从Oracle表中获取所有列的名称? 有没有办法从DatabaseMetaData对象中获取它们?
DatabaseMetaData myDatabaseMetaData = myConnection.getMetaData();
...
我知道我可以使用select语句来获取它们:
Select COLUMN_NAME from user_tab_columns where table_name='MYTABLE'
如果可以从DatabaseMetaData对象获取它们,这两种方法有什么区别?
编辑:发布工作代码(感谢您的回答)
public ArrayList<String> getAllFields(String tableName) {
ArrayList<String> allFields = new ArrayList<String>();
try {
DatabaseMetaData myDatabaseMetaData = myConnection.getMetaData();
ResultSet columnsResultSet = myDatabaseMetaData.getColumns(null, null, tableName, null);
while (columnsResultSet.next()) { allFields.add(columnsResultSet.getString("COLUMN_NAME")); }
} catch (SQLException ex) {
Exceptions.printStackTrace(ex);
}
return allFields;
}
答案 0 :(得分:6)
您正在寻找DatabaseMetaData.getColumns()
您的SQL和JDBC API之间的区别在于,API调用可以在所有DBMS上运行,而SQL只适用于Oracle。
答案 1 :(得分:2)
DatabaseMetaData#getColumns(String,String,String,String)
您的直接SQL调用只能在Oracle中运行,而DatabaseMetaData方法应该与数据库无关。
答案 2 :(得分:1)
DatabaseMetaData是一个接口,所以它完全取决于JDBC驱动程序的实现。谨慎使用最好的和最后发布的。