`

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 <T> List<T> getObjectsList(ResultSet rs, Class<T> k)
			throws SQLException {
		List<T> bl = new ArrayList<T>();
		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
分享到:
评论
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管理,依赖为
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.20</version>
   <scope>runtime</scope>
</dependency>
2 楼 wintersun 2012-09-11  
请问mysql数据版本是多少,jdbc driver是什么,以及其版本?
1 楼 J2EE大鸟 2012-07-10  

相关推荐

    Java数据类型和MySql数据类型对应一览

    在本文中,我们将对 Java 数据类型和 MySql 数据类型进行对应一览,帮助开发者更好地理解和使用这两种类型。 字符串类型 在 Java 中,字符串类型对应的是 java.lang.String 类型。在 MySql 中,字符串类型对应的是...

    MySql于Java数据类型对应列表

    **数据库类型:** BIGINT UNSIGNED **JAVA类型:** `java.math.BigInteger` **JDBC类型:** -5 **描述:** `BIGINT` 用于存储非常大的整数值。UNSIGNED 表示该整数为无符号类型。在Java中,它被映射为 `BigInteger` ...

    JDBC数据类型与数据库字段对应表——mysql篇

    JDBC数据类型与数据库字段对应表——mysql篇 数值型 整型 JDBC tinyint java.lang.Integer smallint mediumint java.lang.Long int bigint java.math.BigInteger

    java_mysql_数据类型对照.doc

    整型系列(INTEGER、TINYINT、SMALLINT、MEDIUMINT、BIT、BIGINT):分别对应Java中的`java.lang.Long`、`java.lang.Integer`、`java.lang.Boolean`以及`java.math.BigInteger`,JDBC类型各异,适用于存储各种大小的...

    javabiginteger源码-my-springboot-learning:我的springbootlearning

    java biginteger 源码 Spring Boot ...over JSON ...Mysql与java的数据类型对应关系 常用数据类型: int Integer bigint Long bigint unsigned BigInteger varchar String Mysql 与 java 的时间类型

    Hibernate-add学习

    | 整型 | tinyint, smallint, mediumint, int, bigint | int, number | int, bigint, numeric | Integer, Long, BigInteger | | 单精度浮点型 | float | number | float | Float | | 双精度浮点型 | double | number...

    无穷大

    在编程中,标准的整数类型(如int和long)有其存储限制,无法表示超出一定范围的数值。对于需要处理大数的应用,如加密算法、金融计算或数学模拟,可以使用特殊的大数库,如Java的BigInteger或Python的decimal模块...

Global site tag (gtag.js) - Google Analytics