`

dbutils 别名问题,dbutils MapHandler、MapListHandler 别名解决办法

阅读更多

dbutils 别名问题,dbutils MapHandler、MapListHandler 别名解决办法.

最近在赶一个项目,刚好用了apache 的 dbuils 做持久层(hibernate太笨重了) ,这个dbutisl比较轻便。在使用过程中用到了多表查询数据,返回的数据是一个map,发现了dbutisl 的一个不太合理的地方(也不能算是bug),就是多表查询返回map时MapListHandler  不能使用别名,只要是设计别名的都查询不到数据,而通过工具单独运行sql查询结果是没问题的,查看了 dbutisl 的源码发现了原因:BasicRowProcessor 类的 tomap 方法不合适得改改。见截图;

 

即:将 result.put(rsmd.getColumnName(i), rs.getObject(i));

改为:result.put(rsmd.getColumnLabel(i), rs.getObject(i));

就可以使用别名了。

同时上传了我改后的jar文件,我是在jdk1.5的环境编译的jar

 

 

 

备注:我用的dbutils 的版本是 1.4(最新)

  • 大小: 75.8 KB
分享到:
评论
4 楼 zhangpeili 2014-06-12  
zhangpeili 写道
    	try {
    		Connection connection = DatabaseConnectionPool.getConnection();
    		String sql = "select UPLOAD_FILE_ID as upload from nbu_upload_file where rownum<5";
    		System.out.println(sql);
    		PreparedStatement ps = connection.prepareStatement(sql);
    		ResultSet rs = ps.executeQuery();
    		ResultSetMetaData rsmd = rs.getMetaData();
    		int count = rsmd.getColumnCount();
    		if(rs.next()){
    			for (int i = 1; i <= count; i++) {
    				System.out.print(rsmd.getColumnName(i)+":"+rs.getObject(i)+"------");
    			}
    			System.out.println();
    		}
		} catch (SQLException e) {
			e.printStackTrace();
		}


UPLOAD:CEEB382379644000E04400144F674217------


返回的就是别名哦
3 楼 zhangpeili 2014-06-12  
    	try {
    		Connection connection = DatabaseConnectionPool.getConnection();
    		String sql = "select UPLOAD_FILE_ID as upload from nbu_upload_file where rownum<5";
    		System.out.println(sql);
    		PreparedStatement ps = connection.prepareStatement(sql);
    		ResultSet rs = ps.executeQuery();
    		ResultSetMetaData rsmd = rs.getMetaData();
    		int count = rsmd.getColumnCount();
    		if(rs.next()){
    			for (int i = 1; i <= count; i++) {
    				System.out.print(rsmd.getColumnName(i)+":"+rs.getObject(i)+"------");
    			}
    			System.out.println();
    		}
		} catch (SQLException e) {
			e.printStackTrace();
		}


UPLOAD:CEEB382379644000E04400144F674217------
2 楼 haiyangyiba 2013-04-23  
BeanProcessor.class下面有此下判断,楼主是否应该验证下,当我的sql中没有存在别名的情况呢?
 String columnName = rsmd.getColumnLabel(col);
 if (null == columnName || 0 == columnName.length()) {
     columnName = rsmd.getColumnName(col);
 }
1 楼 haiyangyiba 2013-04-23  
我也是dbutils-1.4的版本,遇到这个问题了,同样问题,支持下楼主

相关推荐

    dbUtils常用结果集BeanHandler、BeanListHandler、MapHandler、MapListHandler转Json串

    【dbUtils常用结果集[BeanHandler]、[BeanListHandler]、[MapHandler]、[MapListHandler,Object&gt;]查询结果转Json串】

    dbutils dbutils dbutils dbutils

    DBUtils 是一个非常重要的 Python 模块,专为数据库连接设计,它在 Python 的数据库应用开发中扮演着不可或缺的角色。这个模块主要目的是提供一个稳定、健壮的接口,用于管理和操作数据库连接,使得开发者能够更方便...

    commons-dbutils-1.7.jar

    4. 结果集处理:DBUtils提供了BeanHandler、MapHandler等处理结果集的工具,可以将结果集直接转换为Java对象,简化了数据绑定的过程。 5. 避免资源泄露:DBUtils自动关闭数据库连接、Statement和ResultSet,避免了...

    Dbutils项目实例

    MapHandler :将ResultSet中第一行的数据存成Map映射 MapListHandler :将ResultSet中所有的数据存成List List中存放的是Map ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object org apache ...

    Commons-dbutils1.7 jar包.rar

    commons-dbutils包是Apache...MapHandler :将ResultSet中第一行的数据存成Map MapListHandler :将ResultSet中所有的数据存成List&lt;Map,Object&gt;&gt; ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

    DbUtils数据库查询工具包 v1.8.1.zip

    DbUtils提供了一些预定义的实现,如ArrayListHandler(将结果集转换为List对象)、BeanHandler(将结果集映射到Java Bean)、MapHandler(将结果集映射到Map对象)等,可以根据需求选择合适的Handler。 3. **...

    python的DBUtils包

    Python的DBUtils是一个非常实用的库,主要用于增强Python标准库中的`DB-API 2.0`接口,提供了线程安全性和连接池管理等功能。DBUtils是基于PEP 249设计的,它使得数据库连接的管理和维护变得更加简单,尤其在多线程...

    apache dbutils中文说明

    DBUtils提供了一系列预定义的`ResultSetHandler`实现,如`ArrayHandler`、`ArrayListHandler`、`BeanHandler`、`BeanListHandler`、`MapHandler`、`MapListHandler`和`ScalarHandler`,以满足不同的数据转换需求。...

    DButils详解

    * `MapHandler`:将第一行数据转换为Map映射。 * `MapListHandler`:将所有数据转换为Map列表,每个Map代表一行。 * `ScalarHandler`:获取单个结果,将某一列的数据转换为Object。 * 结果集包装器: * `...

    DBUtils数据库的使用

    DBUtils提供了一些预定义的实现,如ArrayListHandler将结果集转换为ArrayList,BeanHandler将每一行数据映射到一个Java Bean对象,MapHandler则将每一行数据转换为Map。 3. **BasicRowProcessor**和**...

    dbutils-1.3架包和源码

    DBUtils提供了一些预定义的实现,如`ArrayHandler`、`BeanHandler`和`MapHandler`,可以直接将结果转换为数组、JavaBean或Map对象。 3. **TransactionManager**:DBUtils提供了一种简单的事务管理机制,允许在多条...

    Dbutils_详解.docx

    - 其他如 `BeanHandler`, `ColumnListHandler`, `KeyedHandler`, `MapHandler`, `ScalarHandler` 等,提供了多种转换策略以满足不同的需求。 Dbutils 的优势在于: 1. **减少代码量**:通过提供预定义的 Handler,...

    dbutils

    而`ResultSetHandler` 接口则定义了如何处理查询结果集,提供了多种预定义的实现,如`ArrayListHandler`、`BeanHandler` 和 `MapHandler`,可以根据需求将结果集转换为列表、Java对象或Map。 3. **异常处理**:`...

    commons-dbutils-1.6

    3. **结果集处理**:DBUtils提供了BeanHandler、ArrayHandler、MapHandler等处理类,可以方便地将查询结果转换为Java对象,如JavaBean、数组或Map,简化了数据绑定的过程。 4. **事务管理**:DBUtils提供了简单易用...

    Dbutils 的jar包

    Dbutils 是 Apache Commons DbUtils 的简称,它是一个用于简化 Java 数据库编程的开源库。Dbutils 基于 JDBC(Java Database Connectivity),提供了一套简洁、高效且易于使用的API,帮助开发者更方便地处理数据库...

    dbutils的jar包和源码

    dbutils 提供了一些预定义的实现,如 `ArrayListHandler`(将结果集转换为 ArrayList),`BeanHandler`(将结果行映射到 Java Bean 对象),`MapHandler`(将结果行映射到 Map)等。 - **ConnectionPool**: dbutils...

    commons-dbutils.jar.rar

    `commons-dbutils.jar.rar` 是一个包含Apache Commons DBUtils库的不同版本的压缩文件,主要用于Java应用程序中的数据库操作。DBUtils是一个实用程序库,它简化了JDBC(Java Database Connectivity)的使用,提供了...

    commons-dbutils-1.4.jar

    《Apache Commons DBUtils详解及其在Java数据库操作中的应用》 Apache Commons DBUtils是Apache软件基金会开发的一个开源项目,它提供了一套简洁、高效且实用的工具类,用于简化Java应用程序中的数据库操作。这个...

    dbutils工具包和源文件

    `dbutils` 提供了多种预定义的实现,如`ArrayListHandler`(将结果集转换为列表)、`BeanHandler`(将结果集映射到Java Bean对象)和`MapHandler`(将结果集映射到Map对象)。 3. **异常处理**: `dbutils` 使用`...

    DbUtils-1.7.zip

    常见的实现有`ArrayHandler`, `BeanHandler`, `ListHandler`, `MapHandler`等,它们将结果集转换为各种数据结构。 - **ConnectionProvider**: 负责提供数据库连接,可以自定义实现,例如使用连接池。 2. **使用...

Global site tag (gtag.js) - Google Analytics