簡體   English   中英

如何在不創建表的情況下從 mysql 列定義中獲取 java.sql.Types?

[英]How to get java.sql.Types from mysql column define without creating the table?

目標

在不創建表的情況下獲取 java.sql.Types。

細節

如果我定義這樣的列“ a JSON DEFAULT NULL”

如何獲得 java.sql.Types 關於“a”列?

我試過的

我使用jdbc,所以我使用connection.getMetaData().getTypeInfo來獲取所有類型

    public static Map<String, Integer> load(final DatabaseMetaData databaseMetaData) throws SQLException {
    Map<String, Integer> result = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
    try (ResultSet resultSet = databaseMetaData.getTypeInfo()) {
        while (resultSet.next()) {
            result.put(resultSet.getString("TYPE_NAME"), resultSet.getInt("DATA_TYPE"));
        }
    }
    return result;
}

然后我像這樣得到這個 map

BIGINT -> {Integer@5274} -5

BIGINT UNSIGNED -> {Integer@5274} -5

等等。

但是沒有JSON。

更重要的是?

如果我這樣定義

“id_card LONG CHAR VARYING”

那我怎樣才能得到 java.sql.Types?

您使用的代碼看起來是獲取支持的列類型的正確方法。

您在 output 中看不到JSON的一個可能解釋是您的數據庫不支持JSON作為列類型。 例如,雖然 MySQL 8.x 支持JSON數據類型,但根據手冊MySQL 5.6 不支持它。

它也可能是數據庫驅動程序。 例如,如果您嘗試將 Connector/J 5.1 驅動程序與 MySQL 8.x 數據庫一起使用,我不知道vis JSON 支持會發生什么。


更新

我查看了源代碼 MySQL Connector/J 8.x(最新),我認為您看不到JSON的原因是……它是 JDBC 驅動程序中的錯誤。

查看DatabaseMetadata的實現 class,在第 4012 行(或附近)我們看到getTypeInfo()具有為硬連線類型列表組裝ResultSet的代碼。 JSON類型沒有,有評論說:

  // TODO add missed types (aliases)

(FWIW,我在驅動程序中看不到任何邏輯來檢查數據庫實際支持哪些數據類型。這可能是另一個錯誤。)

因此,我的“可能的解釋”(見上文)並不是您特定情況下的實際解釋。


解決方案? 我認為在這種情況下沒有一個好的。 但我建議您提交錯誤報告 (我找不到針對此特定問題的現有錯誤報告,盡管在 MySQL Connector/J 5.x 中存在一些關於缺失類型的舊錯誤)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM