2014-02-14 34 views
1

我在嘗試從Java文件訪問數據庫內容(BIGINT)時遇到錯誤。我無法弄清楚這個異常的修復方法。mysql.jdbc數據類型的有效範圍之外的異常INTEGER

我收到以下錯誤:

com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: 
    '5.62949953421312E15' in column '1' is outside valid range for the datatype INTEGER. 

Java代碼:

long pID=0; 

SQLStatement = connection.createStatement(); 
String Query101 = "select projectID from Project"; 
ResultSet rs101 = SQLStatement.executeQuery(Query101); 
while (rs101.next()) { 
    pID = rs101.getLong("ProjectId"); 
} 

SQL代碼:

CREATE TABLE Project (projectID bigint(20) Primary key) 

我正在使用的數據庫表中的projectID的值爲5629499534213120

+0

我可以知道爲什麼給我-1嗎?請給出一些解釋 – Judy

+0

Java中'long'和MySQL中'BIGINT'的簽名範圍都是-2^63到2^63 - 1.你的問題在MySQL的一方,因此是MySQLDataException。 –

+0

在這個問題上有何進展? –

回答

1

你的pID是long類型,它是4個字節,最大值是2^31-1 = 2,147,483,647。 因此,您無法在pID = rs101.getLong(「ProjectId」)中爲其分配5.62949953421312E15;

+1

長是64位。這是2^64-1,所以我認爲它應該工作。 32位是int值。這裏是鏈接http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html – Judy

+0

我認爲這是C#代碼 –

+0

在'C#'中''長'類型是64位(8字節) 。 –

1

查看this page後查看是否有任何已知的MySQL Connector/J問題。我相信你的ProjectID列實際上是INT(INTEGER的同義詞),正如例外情況所暗示的那樣。我會查看您的Project表,並確保該列確實是BIGINT。

BIGINT是MySQL的64位有符號整數,就像long是Java的64位有符號整數。這意味着它們具有相同的範圍-2 to 2 - 1.

您正在使用正確的方法。但是我認爲你的列的數據類型不是你想象的那樣。

+0

表格絕對是BIGINT。 (相反,如果我將SQL表值作爲int,代碼完美工作) – Judy

+0

有趣。我想知道爲什麼這個異常會將該列標記爲'INTEGER'類型。 –

相關問題