`

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  

相关推荐

    MySQL数据库:表的字段类型.pptx

    作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。 表的字段类型 数值类型 表的字段类型 日期和时间类型 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。 每个时间类型有...

    mysql数据库转瀚高数据库所需要的函数列表

    1、mysql数据库转国产化瀚高数据库; 2、有些函数在瀚高数据库中不存在,需要添加自定义函数。

    mysql数据库全部字段类型

    BIGINT 大整数,带符号的范围是-9223372036854775808到9223372036854775807 BIGINT UNSIGNED 大整数,无符号的范围是0到18446744073709551615 BINARY 类似于CHAR类型,但保存二进制字节字符串而不是非二进制字符串 ...

    Mysql数据库设计.pdf

    Mysql数据库设计 数据库设计 MYSQL数据库设计 串转义序列 \0 NUL(ASCLL 0) \' \" \b 退格 \n 新⾏ \r 回车 \t 制表符 \\ 反斜杠 数值列类型 TINYINT 1字节 ⾮常⼩的整数 有符号值:-128⾄127 ⽆符号值:0⾄255 ...

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

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

    MySql数据类型,非常详细!

    非常详细的对MySql数据库类型的介绍.

    Java的long和bigint长度对比详解

    在本文中小编给大家分享了关于Java的long和bigint长度比较的知识点内容,有兴趣的朋友们学习参考下。

    基于2019汽车车型数据库(MySql示例)

    数据均借鉴后把主键转换成bigint类型,方便后续ETL清洗和迁移,发布仅仅用于交流学习 汽车品牌:temp_car_brand (460条记录) 汽车厂商:temp_car_maker (485条记录) 汽车规格:temp_car_size (22条记录) 汽车...

    mysql创建表方法.zip

    MySQL 创建表是一个基础的数据库操作,它涉及到定义表的结构,包括列名、数据类型、约束等。下面我将详细解释如何在 MySQL 中创建表,并给出一个完整的例子。 • 表名:你想要创建的表的名称。 • 列名:表中的列...

    MySQL 数据类型 详解

    MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~8388607) int(m) 4个字节 范围(-2147483648~2147483647) ...

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

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

    Mysql支持的数据类型(总结)

     Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。  扩展后增加了TINYINT,...

    mysql 全国地区数据库表 五级数据库 村级地区表

    `parent_code` bigint(14) unsigned NOT NULL DEFAULT '0' COMMENT '父级行政代码', `area_code` bigint(14) unsigned NOT NULL DEFAULT '0' COMMENT '行政代码', `zip_code` mediumint(6) unsigned zerofill NOT...

    MYSQL数据库表结构优化方法详解

    本文实例讲述了MYSQL数据库表结构优化方法。分享给大家供大家参考,具体如下:  选择合适的数据类型  1、使用可以存下你的数据的最小的数据类型  2、使用简单的数据类型。Int要比varchar类型在mysql处理上简单 ...

    Mysql支持的数据类型(列类型总结)

    Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。 扩展后增加了TINYINT,MEDIUMINT,BIGINT...

    MySQL数据库中把int转化varchar引发的慢查询

    最近一周接连处理了2个由于int向varchar转换无法使用索引,从而引发的慢查询。 CREATE TABLE `appstat_day_prototype_201305` ( `day_key` date NOT NULL DEFAULT '1900-01-01', ...`times_total` bigint(20) N

    DB2数据库中的各数据类型

     数值型数据类型包括 SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL 和 DOUBLE。所有数值都有符号和精度。精度是指除符号以外的二进制或十进制的位数。如果数字的值大于等于零,认为符号为正。  *小整型,...

    bigint-node:围绕纯 javascript BigInteger 库的 Node.JS 包装器

    BigInt 节点 这是由创建的纯 Javascript Big Integer 库的 Node.JS 端口。 它目前还没有导出所有功能(大部分与加密相关的功能都没有),但导出了大多数只需要使用 Big Integers 所需的功能。 在可能的情况下,此...

    生成19位bigint/long类型的不重复i

    * 类名称:IdWorker * 类描述: 生成19位bigint/long类型的不重复i

    OC之-BigInteger

    类似java里面的BigInteger类型,进行大数存储和计算!

Global site tag (gtag.js) - Google Analytics