我在 MySQL 資料庫中有一個 DATETIME
欄位。我使用 ResultSet
元資料來檢索列類型,它會傳回 TIMESTAMP
這是不正確的。如何取得此列的正確 java.sql.SQLType
值?
我會嘗試更具體。我用 Java 程式碼定義資料庫的結構。例如;
Column TITLE = new Column(JDBCType.VARCHAR).size(100).title("Created");
然後我的小型驗證器程式碼會建立此列(假設表定義在那裡)。然後,稍後如果我將此程式碼修改為
Column TITLE = new Column(JDBCType.VARCHAR).size(200).title("Created");
我的小型驗證器將列大小變更為 200。為此,我將元資料檢索為
DatabaseMetaData metaData = connection.getMetaData();
然後存取列屬性
ResultSet resultSet = metaData.getColumns(getCatalog(), schema, table, columnName);
這將傳回 JDBCType
枚舉。假設我在 MySQL DATETIME
欄位上執行此查詢。我確實知道在Java中沒有這樣的東西,它的等價物是 java.sql.Timestamp
類別。但在 MySQL 中,DATETIME 不是 TIMESTAMP。
如何在Java程式碼中區分MySQL DATETIME
和MySQL TIMESTAMP
?
從通用JDBC 角度來看,您可以使用
DatabaseMetaData .getColumns(...)
,這應該回傳:換句話說,它應該包含資料來源中使用的資料類型的名稱(在您的情況下,MySQL應該會傳回
DATETIME
)。注意:我還沒有真正驗證過這一點,我的答案純粹基於通用 JDBC 要求。