`
xiaoych
  • 浏览: 145303 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于数据库中的boolean字段,在sqlmap中的映射问题

阅读更多
最近遇到一个问题非常有意思。大概是我在数据库的某张表里面建了一个boolean字段,比如名称叫做:is_hot 那么在sqlmap的result里面,情况可能会是这样:

<result property="isHot" column="IS_HOT" javaType="BOOLEAN" jdbcType="BIT"/>


我习惯了hibernate的方式,对应的类里面有这么一个属性:

private boolean isHot;
public void setHot(boolean isHot) { this.isHot = isHot; }
public boolean isHot() { return this.isHot; }


结果发现异常: There is no WRITEABLE property named...

仔细研究了一下ibatis的官方文档,发现其中有句话:基本数据类型如int,boolean和float不能直接使用。因为iBATIS是面向对象的解决方案。因此所有的参数和结果必须是对象。

将java代码改为:

private Boolean isHot;
public void setIsHot(Boolean isHot) { this.isHot = isHot; }
public Boolean getIsHot() { return this.isHot; }


问题解决。
分享到:
评论
4 楼 di1984HIT 2013-02-05  
2楼写的不错,自定义converter,很好的
3 楼 bluky999 2010-08-17  
我觉的2楼给出的这个方案还是不错的   比较实用!

可以放到自己的util包里 
2 楼 frogfool 2008-04-22  
补充说明:
ibatis 默认的java.lang.Boolean 的handler:com.ibatis.sqlmap.engine.type.BooleanTypeHandler只识别Boolean.TRUE和Boolean.FALSE2种状态,可根据需要自己写个BooleanTypeHandler支持null的情况:
在条件查询<isNull>时可能会用到

public class BooleanTypeHandler extends BaseTypeHandler {

	private static final byte YES = 1;

	private static final byte NO = 0;

	private static final byte NULL = -1;

	public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
		byte value = cs.getByte(columnIndex);
		if (YES == value) {
			return Boolean.TRUE;
		} else if (NO == value) {
			return Boolean.FALSE;
		}
		return null;
	}

	public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
		byte value = rs.getByte(columnIndex);
		if (YES == value) {
			return Boolean.TRUE;
		} else if (NO == value) {
			return Boolean.FALSE;
		}
		return null;
	}

	public Object getResult(ResultSet rs, String columnName) throws SQLException {
		byte value = rs.getByte(columnName);
		if (YES == value) {
			return Boolean.TRUE;
		} else if (NO == value) {
			return Boolean.FALSE;
		}
		return null;
	}

	public void setParameter(PreparedStatement ps, int columnIndex, Object parameter, String jdbcType) throws SQLException {
		byte value = NULL;
		if (null != parameter) {
			if (((Boolean) parameter).booleanValue()) {
				value = YES;
			} else {
				value = NO;
			}
		}
		ps.setByte(columnIndex, value);
	}

	public Object valueOf(String value) {
		if (null != value) {
			if (Boolean.valueOf(value).booleanValue()) {
				return Boolean.TRUE;
			} else {
				return Boolean.FALSE;
			}
		}
		return null;
	}

}
1 楼 jarit 2007-12-14  
早点发过来看嘛。。。。

相关推荐

    SQLMap完成安全测试

    sqlmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入漏洞并接管数据库服务器。它有一个强大的检测引擎,许多适合于终极渗透测试的良好特性和众多的操作选项,从数据库指纹、数据获取到访问底层文件系统...

    SQLServer常用字段类型

    本资料是一些SQLServer中常用字段类型

    sqlmap手册.zip

    sqlmap用户手册,sqlmap命令详解,多文档,更详细 1. ./sqlmap.py -u http://www.evil0x.com/ test.php?p=2 -f -b –current-user –current-db –users –passwords –dbs -v 0 2. ./sqlmap.py -u ...

    不动产登记数据库标准.docx

    * Varbin: 存储二进制文件所在的物理路径及文件名,在数据交换时需要将该字段指向的文件复制到存储交换数据文件的物理路径,同时将该字段的物理路径值转换为存储交换数据文件的物理路径值。 * Varchar: 可变长度的...

    sqlite数据库 boolean类型的小小测试

     sqlite数据库中没有单独的Boolean存储类,Booean值以0(false)和1(true)来存储.  经我短时间测试的实践, 显示boolean 有三种状态, 0(false) 1(true) 和 null,如下图所示,  经过下列插入语句,测试,均可...

    Mysql数据库学习总结.pdf

    * 增加字段:使用 `Alter table` 语句增加字段,例如 `Alter table person add sex Boolean;`。 * 删除字段:使用 `Alter table` 语句删除字段,例如 `Alter table person drop sex;`。 此外,还介绍了删除主键、...

    Java中的反射实现数据库操作

    实现课重复利用的数据库操作方法,第一次发东西希望大家多多关照

    Boolean RT资源包

    Boolean RT资源包,可用于Unity 几何体布尔运算

    详谈java中boolean和Boolean的区别

    下面小编就为大家带来一篇详谈java中boolean和Boolean的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Boolean RT.zip

    BooleanRT, 实现2个物体间的布尔运算 The extension provides the following functions: 1- Real-time or per-click Boolean execution. 2- Material, UV and texture preservation. 3- Saving to prefab. 4- ...

    Java数据库查询结果的输出

     利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。 类Vector:  定义如下: public class Vector extends ...

    flowable集成达梦8数据库

    flowable集成达梦8数据库

    delphi中操作数据库最简方法示例

    这个数据库操作的例子中libdb库中包含了两个很简单的函数,一个执行sql语句,另一个查询。 function ExecSql(sCon, sSql: string): boolean; function QrySql(sCon, sSql: string): string; 我的思路是最简化原则:...

    数据库备份设计文档.docx

    类设计 Entity实体类设计 Resources extends BaseEntity 字段名称 字段类型 是否必填 备注 name String 是 权限资源名 Controller接口类设计 重要方法、算法以及难点解决方案描述 数据库备份设计文档全文共14页,...

    SQLServer数据库设计规范.txt

    命名都采用英文字符,每个单词的首个字母要大写 2.7 SQL语句的编写规范 数据库中存储过程和触发器中涉及大量的SQL语句,对SQL语句的编写规范如下: 关键字大写:在SQL语句的编写中,凡是SQL语句的关键字一律大写,如...

    mongoose-modified-at:Mongoose插件,可跟踪您指定的字段并将其更改时间自动记录到数据库中

    mongoose-modified-atMongoose 插件 - 自动更新字段变化时间并记录到数据库中,类似 Mongoose 自带的 timestamps 功能。中文 |目录使用场景考虑一个例子,我们有个文章发布与展示的需求,数据模型如下(为了简洁便于...

    MongoDb数据结构详解.pdf

    在关系型数据库中,关系数据库的每⼀张表就是⼀个关系模型的映射,每张表的字段就是对应的实体的属性和主外键的集合,每个字段需要 提前定义。 Document:这⾥的user集合("表")有⼀个document(document可以理解...

Global site tag (gtag.js) - Google Analytics