2014-02-14 36 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'类型。 –

相关问题