MySQL接続からUbuntu 14とJavaおよびNetBeansを使用してメタデータを取得する際に問題が発生します。私はDatabaseMetaData
オブジェクトのgetColumns
メソッドから空のResultSetを取得します。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()'は何を返しますか?予想されるデータベース名ですか?空の文字列ですか? 'ヌル'? –
メソッド呼び出しでは空の文字列です。 con.setCatalog()の後、指定された値(この例では "Users")を取りますが、まだ空のセットを返します。私が情報スキーマデータベースを照会すると、すべてのテーブルはTABLE_CATALOGカラムに "def"という値を持ちます(これは 'デフォルト'のような意味です)。これを回避策として使用しています。 – Checho