mysql biginteger_mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突

mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突

实体Bean

public class Broke {

/**

* brokeid

*/

BigInteger brokeid;

/**

* 节点id 与 节点id为多对一的关系

*/

String nodeid;

/**

* brokeip

*/

String brokeip;

/**

* 删除标记 0--notdelete 1--delete (0 is default)

*/

int deleteflag = 0;

}

brokeid为BigInteger类型, 在mysql数据库中brokeid同样也为BigInteger类型,看起来如果在数据库中查找相关Broke实体应该没有什么问题,然而在查找出resultSet结果进行反射时,却抛出了argument type mismatch的错误信息。。下面看反射代码。。

public static List getObjectsList(ResultSet rs, Class k)

throws SQLException {

List bl = new ArrayList();

if (rs != null) {

while (rs.next()) {

T o = null;

try {

o = k.newInstance();

for (Method m : k.getDeclaredMethods()) {

String name = m.getName();

if (name.startsWith("set")) {

//System.out.println(rs.getObject(name.substring(3)).getClass().getName());

m.invoke(o, rs.getObject(name.substring(3)));

}

}

bl.add(o);

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

}

return bl;

}

return null;

}

当程序运行时,将反射执行到Brokeid时,就会在红色程序部分抛出argument type mismatch的异常信息,打印出程序中注释掉的那句输出语句时,便可以判断出,此时,从resultSet对象中取出的object对象为Long类型。之后,将Broke实体中brokeid的数据类型改为Long即可。

在测试之后,发现改为Long类型之后,并不影响Broke对象的插入和其他一些相关操作。  而原先的BigInteger数据类型在添加实体的时候是可以的,但是在rs.getObject时,就会发生类型不匹配的错误。。

0

0

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-07-10 13:23

浏览 12426

分类:数据库

评论

5 楼

J2EE大鸟

2013-09-29

xiangkui 写道

我也碰到了同样的问题,想让ResultSet结果集中对象反射成实体Bean,但mysql 的BigInteger类型 查出来确是Long类型,不懂。。。

嗯,很有可能在取到resultset结果集时,mysql驱动jar包,已经将其默认转化为了long类型,所以反射时出现这个问题。 有可能mysql认为在mysql数据库中bigint就为long型,因为在mysql中是没有long型的。

4 楼

xiangkui

2013-09-29

我也碰到了同样的问题,想让ResultSet结果集中对象反射成实体Bean,但mysql 的BigInteger类型 查出来确是Long类型,不懂。。。

3 楼

J2EE大鸟

2012-09-11

wintersun 写道

请问mysql数据版本是多少,jdbc driver是什么,以及其版本?

我们的数据库是部署在linux上面的,为最新版:MySQL-client-5.5.25a-1.linux2.6.x86_64

jdbc driver由maven管理,依赖为

mysql

mysql-connector-java

5.1.20

runtime

2 楼

wintersun

2012-09-11

请问mysql数据版本是多少,jdbc driver是什么,以及其版本?

1 楼

J2EE大鸟

2012-07-10

2fd2d9c1d175d11752585fa9b76aba29.gif

你可能感兴趣的:(mysql,biginteger)