Ich habe ein Problem beim Abrufen von Metadaten aus einer lokal laufenden MySQL-Verbindung, Ubuntu 14, mit Java und NetBeans. Ich bekomme ein leeres ResultSet von der getColumns
Methode eines DatabaseMetaData
Objekts.DatabaseMetaData # getColumns gibt ein leeres ResultSet zurück
Der Code ist der folgende:
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;
}
ich normalerweise Anfragen an die Datenbank tun kann, ist der Benutzer DBA, die Tabellenspalten hat, habe ich in anderen Fragen gesehen, dass es ein wenig schwierig sein kann, mit Fällen und so weiter, aber ich habe es auf viele Arten versucht, und ich hatte keine erwarteten Ergebnisse.
Es funktioniert nicht. Ich vermute, dass etwas mit dem Treiber nicht stimmt, jedenfalls benutze ich Ubuntu 14.04, MySQL 5.5, JDBC 5.1.35, JDK 1.8 und Netbeans 8.0.2, falls jemand ein Kompatibilitätsproblem kennt. – Checho
Was gibt 'con.getCatalog()' zurück? Der erwartete Datenbankname? Eine leere Zeichenfolge? "null"? –
Es ist eine leere Zeichenfolge im Methodenaufruf. Nach con.setCatalog() nimmt es den gegebenen Wert (in diesem Fall "Benutzer"), gibt aber immer noch einen leeren Satz zurück. Wenn ich die Informationsschemadatenbank abfrage, haben alle Tabellen den Wert "def" in der Spalte TABLE_CATALOG (ich denke, es bedeutet so etwas wie 'default'). Ich benutze das jetzt als Workaround. – Checho