簡體   English   中英

JDBC 將整數從 mysql 數據庫轉換為長整數

[英]JDBC converting integer into a long from mysql database

我有一個 sql 表,它存儲一個對象,該對象具有一個我稱為 id 的主鍵。 我有一個方法可以從 sql 表中收集列值並創建所述對象(數據庫中的每一行對應於 java 中的一個對象)。

例如,

ArrayList<Object> objectList = new ArrayList<Object>();
Connection connection = createNewConnectionToDatabse();
PreparedStatement statement = connection.prepareStatement("SELECT * FROM objects;");
ResultSet rs = statement.executeQuery();
while(rs.next()){
     Object obj = new Obj(rs.getInt(1)); // rs.getInt(1) should return the integer id for the column...
     objectList.add(obj);
}

return objectList;

這在過去的幾個小時內運行良好,但由於某種原因,幾分鍾前,java 開始將列 id 的結果視為 Long 而不是 int。 現在我一直收到一個錯誤,我無法將 int 轉換為 long 但在它返回列 id 作為 int 之前。 為什么 JDBC 不將 sql 數據庫中的 int 作為 int 返回?

我還嘗試將 long 轉換回 int,但 1) 仍然無法解釋為什么代碼之前運行良好但現在停止工作,以及 2) 老實說轉換並不能解決這里的根本問題。

任何幫助將不勝感激。 謝謝你。

所以我意識到問題在於我正在使用 Integer 類(我需要訪問空值),因此rs.getInt()不能滿足我的問題,因為rs.getInt()會拋出空指針異常如果它檢測到一個空值(我的數據庫將有)。 所以我使用(Integer) rs.getObject(1)來獲取表第一列中的 id 值。 但是,出於某種原因, rs.getObject(1)在檢測到數據庫中的數字值時返回了 Long 而不是 int。 解決方案恰好是我們rs.getObject(1, Integer.class)並且完全解決了問題,並允許我繼續使用空值和整數。

getObject(int)返回的值的類型由 SQL 列類型和 JDBC 驅動程序決定。 對於 MySQL, 6.5 Java、JDBC 和 MySQL 類型中的 Connector/J 8.x 文檔指出INTEGER UNSIGNEDBIGINT映射到Long


1 - 沒關系。 MySQL 的BIGINT實際上是一個 64 位有符號整數,所以這是有道理的。

你能試試下面的代碼嗎:

ArrayList<Object> objectList = new ArrayList<Object>();
Connection connection = createNewConnectionToDatabse();
PreparedStatement statement = connection.prepareStatement("SELECT * FROM objects;");
ResultSet rs = statement.executeQuery();
while(rs.next()){
     Object obj = new Obj(rs.getLong(1)); // rs.getLong(1) will return the long id for the column...
     objectList.add(obj);
}

return objectList;

我們正在將 Object 類中的 id 字段的類型更改為 long,方法是使用 rs.getLong() 方法而不是 rs.getInt() 方法從 id 列中檢索值。

希望這會有所幫助!

暫無
暫無

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

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