`
san_yun
  • 浏览: 2639459 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JdbcTempate处理mysql TINYINT返回Boolean的问题

    博客分类:
  • jdbc
 
阅读更多

 

   当mysql中类型为"TINYINT UNSIGNED"或者"TINYINT "时,用JDBC取出记录时,getObject()得到的是boolean类型,这时必须用getInt()才行。

 

   spring JdbcTemplate的API 默认是直接调用rs.getObject()处理的,所以需要扩展它的方法,处理过程如下:

 

1. 使用JdbcTemplate的RowMapper API

 

public <T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException {
		return query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper));
	}

 

 

2. JdbcTemplate的queryForList和queryForMap都是ColumnMapRowMapper,覆盖其mapRow方法,主要就是增加一个类型判断:

 

  private static class MyColumnMapRowMapper extends ColumnMapRowMapper {

        public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
            Map<String, Object> mapOfColValues = createColumnMap(columnCount);
            for (int i = 1; i <= columnCount; i++) {

                String key = getColumnKey(JdbcUtils.lookupColumnName(rsmd, i));
                Object obj = null;
                if (rsmd.getColumnTypeName(i).equals("TINYINT")) {
                    obj = rs.getInt(i);
                } else {
                    obj = getColumnValue(rs, i);
                }
                mapOfColValues.put(key, obj);

            }
            return mapOfColValues;
        }
    }

 

 

3. 使用

   protected RowMapper<Map<String, Object>> getColumnMapRowMapper() {
        return new MyColumnMapRowMapper();
    }

   readJdbc.queryForMap(sql, params, getColumnMapRowMapper());

 

分享到:
评论

相关推荐

    Mybatis Generator将tinyint映射成Integer的解决办法.pdf

    在这个自定义实现类中,你需要覆盖`getJdbcTypeForBigDecimal`等方法,以便在处理tinyint类型时返回Integer对应的jdbcType。 2. **直接在XML映射文件中修改**: 如果只是个别字段需要映射为Integer,可以在对应的...

    mybatis-generator自动生成工具,包含tinyint处理,自动获取数据库注释

    默认情况下,MBG可能会将`TINYINT(1)`视为Java的`boolean`类型,但有时这并不符合所有情况,因为`TINYINT`可以存储范围从-128到127的整数值。因此,MBG可能提供了一个定制化的方式,允许开发者自定义如何处理`...

    mysql int和tinyint的区别.docx

    ### MySQL INT 和 TINYINT 的区别 #### 一、INT 和 TINYINT 概述 在MySQL中,`INT` 和 `TINYINT` 是两种常见的整数类型,它们主要用于存储整数值。这两种类型的差异主要体现在存储空间的需求、能够表示的数值范围...

    mysql中TINYINT的取值范围

    在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL 5.1参考手册》http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types)。 Tinyint...

    第2章 用 MySQL 处理数据

    在使用MySQL处理数据时,数据类型的选择至关重要。不同的数据类型会影响存储空间的需求、处理速度以及查询效率等方面。例如,选择合适的整数类型(如TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT等)不仅能够节省存储...

    jbpm3.2.2在mysql中字段的类型的错误

    `TINYINT(1)`在MySQL中通常用于存储单个位的布尔值(尽管实际上它可以存储更大的范围),但在某些情况下,这种类型可能无法满足Jbpm对字段精度或数据类型的要求,尤其是在处理布尔逻辑时。 #### 解决方案:修改字段...

    MYSQL常见问题及解答

    - **`BOOL` 和 `BOOLEAN`:** 在 MySQL 中,这两个关键字实际上是别名,表示 `TINYINT(1)` 类型,这意味着它们只能存储 0 或 1,分别代表 false 和 true。 - **注意:** 尽管 `BOOL` 和 `BOOLEAN` 在 SQL 标准中被...

    mysql处理添加外键时提示error 150 问题的解决方法

    MySQL 处理添加外键时提示 Error 150 问题的解决方法 MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并...

    MYSQL教程02 MYSQL教程02 MYSQL教程02

    在安装与配置MySQL后,我们需要熟悉数据类型,如整数类型(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)、浮点数类型(FLOAT、DOUBLE)、字符串类型(CHAR、VARCHAR、TEXT)、日期和时间类型(DATE、TIME、DATETIME...

    Mysql转oracle工具

    例如,MySQL的`VARCHAR2`对应Oracle的`VARCHAR2`,但MySQL的`TINYINT`在Oracle中可能是`NUMBER(3)`,`BLOB`和`CLOB`在两个系统中都有,但处理方式不同。 3. **对象权限和安全模型**: MySQL的权限管理相对简单,而...

    C#的数据类型

    C#数据类型 C#中的数据类型可以分为值类型、引用类型和指针类型。值类型包括简单类型、结构和枚举,引用类型包括类、接口、委托、数组和字符串等。 值类型是在栈中分配内存,在声明时初始化才能使用,不能为 NULL...

    MYSQL教程MYSQL教程MYSQL教程

    本教程将全面介绍MySQL的基础知识,包括安装配置、数据类型、SQL语句、表的操作、索引、视图、存储过程、触发器、事务处理、备份与恢复等核心概念。 1. **MySQL安装与配置** - MySQL的下载:首先,你需要从MySQL...

    第16讲 mysql笔试题

    1. **数据类型**:MySQL支持多种数据类型,如整数类型(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)、浮点数类型(FLOAT、DOUBLE)、字符串类型(VARCHAR、CHAR、TEXT)和日期时间类型(DATE、TIME、DATETIME、...

    mysql基础知识和mysql优化整理

    2. 数据类型:MySQL支持多种数据类型,如整数类型(TINYINT、INT、BIGINT)、浮点类型(FLOAT、DOUBLE)、字符串类型(CHAR、VARCHAR、TEXT)、日期和时间类型(DATE、TIME、DATETIME、TIMESTAMP)等。 3. SQL语言...

    Mysql的表对象Sql语句转换单表,转换成Oracle创建表sql

    - 数据类型:例如,MySQL的`VARCHAR2`在Oracle中是`VARCHAR2`,但MySQL的`TINYINT`对应Oracle的`NUMBER(3)`。 - 约束定义:Oracle使用`CONSTRAINT`关键字定义约束,而MySQL可以直接在列定义中指定。 - 表空间:...

    云平台开发人员MySQL数据库知识手册

    MySQL 数据库中的数据基本类型包括 BIT、TINYINT、BOOL、BOOLEAN 等。BIT 是一个整数类型,TINYINT 是一个很小的整数类型,BOOL 和 BOOLEAN 是布尔类型。 HELP 命令 HELP 命令是 MySQL 数据库中的一个重要命令,...

    如何优化Mysql千万级快速分页

    在实际开发中,我们经常会遇到 MySQL 数据库的性能问题,特别是在处理千万级数据时,分页查询的性能会变得非常慢。在这篇文章中,我们将探讨如何优化 MySQL 千万级快速分页,详细介绍解决方案。 问题描述 我们有一...

Global site tag (gtag.js) - Google Analytics