我在從Java連接和本地運行的Ubuntu 14連接到Java和NetBeans的MySQL連接中檢索元數據的問題。我從DatabaseMetaData
對象的getColumns
方法中得到一個空結果集。DatabaseMetaData#getColumns返回一個空ResultSet
的代碼如下:
private static HashMap getColumnsFromDB(Connection con, String dbSchema, String tableName) throws SQLException
{
HashMap Columns = new HashMap();
DatabaseMetaData metadata = con.getMetaData();
ResultSet rsColumns = metadata. getColumns(null, dbSchema.toUpperCase(), tableName.toUpperCase(), "%");
while (rsColumns.next())
{
ColumnClass col = new ColumnClass();
col.column_name = rsColumns.getString("COLUMN_NAME");
col.mw_type = UtilClass.toClass(rsColumns.getInt("DATA_TYPE")); // Convert to java type
col.is_nullable = rsColumns.getString("IS_NULLABLE");
col.column_default = rsColumns.getString("COLUMN_DEF");
Columns.put(col.column_name, col);
}
return Columns;
}
我可以做數據庫查詢通常情況下,用戶是DBA,該表列,我已經看到了別人的問題,它可以是一個有點棘手與病例等,但我已經嘗試了很多方法,我沒有預期的結果。
它不起作用。我懷疑它可能是錯誤的驅動程序,在任何情況下,我使用的是Ubuntu 14.04,MySQL 5.5,jdbc 5.1.35,jdk 1.8和netbeans 8.0.2,以防有人知道某些兼容性問題。 – Checho
'con.getCatalog()'返回什麼?期望的數據庫名稱?一個空字符串? 'null'? –
在方法調用中它是一個空字符串。在con.setCatalog()之後,它將使用給定的值(本例中爲「用戶」),但仍返回一個空集。當我查詢信息模式數據庫時,TABLE_CATALOG列中的所有表都具有值「def」(我認爲這意味着類似'default')。我現在將此用作解決方法。 – Checho