`
paladin1988
  • 浏览: 326296 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC备忘录7_ParameterMetaData和ResultSetMetaData的使用

    博客分类:
  • JDBC
 
阅读更多

 

通过ParameterMetaDate可以很好的进行动态sql的拼接

 

	public static void main(String[] args) {
		String sql = "select * from user u where u.money >= ? and u.name like ?";
		Object[] paramsValue = new Object[]{new Float(10.0), new String("%zhao%")};
		queryObjects(sql, paramsValue);
	}
	
	public static void queryObjects(String sql, Object[] paramsValue) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ParameterMetaData pmd = null;
		ResultSet rs = null;
		conn = JdbcUtils.getConnection();
		try {
			pstmt = conn.prepareStatement(sql);
			pmd = pstmt.getParameterMetaData();
			for (int i = 0; i < pmd.getParameterCount(); i++) {
				pstmt.setObject(i+1, paramsValue[i]);
			}
			rs = pstmt.executeQuery();
			while (rs.next()) {
				System.out.println("id = " + rs.getInt("id") + ", name = " 
						+ rs.getString("name") + ", birthday = " + rs.getDate("birthday")
						+ ", money = " + rs.getFloat("money"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

 

 

利用ResultSetMetaData可以将查询数据封装成Map对象返回

将对象包装成List并返回

public class GenerateMapByResultSetMetaData {
	public static void main(String[] args) {
		String sql = "select * from user u where u.money > ?";
		Object[] paramsValue = new Object[]{new Float(10.0)};
		List<Map<String, Object>> listMaps = null;
		try {
			listMaps = getListMap(sql, paramsValue);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("listMaps = " + listMaps.toString());
	}
	
	public static List<Map<String, Object>> getListMap(String sql, Object[] paramsValue) throws SQLException {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		ParameterMetaData pmd = null;
		ResultSetMetaData rsmd = null;
		Integer count = 0;
		
		Map<String, Object> data = new HashMap<String, Object>();
		List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
		
		try {
			conn = JdbcUtils.getConnection();
			pstmt = conn.prepareStatement(sql);
			pmd = pstmt.getParameterMetaData();
			rsmd = pstmt.getMetaData();
			count = rsmd.getColumnCount();
			String[] columNames = new String[count];
			System.out.println("columns count = " + count);
			
			//Set params value into sql
			for (int i = 0; i < pmd.getParameterCount(); i++) {
				pstmt.setObject(i+1, paramsValue[i]);
			}
			
			//Set column name into array
			for (int i = 0; i < columNames.length; i++) {
				columNames[i] = rsmd.getColumnName(i+1);
			}
			
			rs = pstmt.executeQuery();
			while (rs.next()) {
				for (int i = 0; i < columNames.length; i++) {
					data.put(columNames[i], rs.getObject(i+1));
				}
				dataList.add(data);
			}
			
			return dataList;
		} finally {
			JdbcUtils.free(conn, pstmt, rs);
		}
		
	}
}

 

 

分享到:
评论

相关推荐

    JDBC学习笔记

    - **获取方式**:使用`ParameterMetaData`接口获取参数元数据。 #### 二十四、利用结果集元数据将查询结果封装为Map - **实现方式**: - 使用`ResultSetMetaData`获取结果集的列信息。 - 通过`getColumnLabel()`...

    JDBC新特性(API3.0)

    同时,新的ParameterMetaData接口允许开发者获取PreparedStatement对象中参数的类型和属性,提高了预编译语句的灵活性和可读性。 其次,CallableStatement接口的增强使得开发者可以通过参数名称而非索引来设置存储...

    Java数据库编程宝典2

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    Java数据库编程宝典4

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    Java数据库编程宝典1

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    Java数据库编程宝典3

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    Java基础学习43.pdf

    ParameterMetaData和ResultSetMetaData分别用于获取SQL语句参数和结果集的元数据。 基于这些知识,你可以尝试自定义JDBC框架,利用反射优化数据库操作,如动态SQL生成,提高开发效率。例如,可以使用反射创建和设置...

    DM7程序员手册

    - **数据源与连接池**:说明了如何管理和使用JDBC连接池。 - **DM扩展连接属性的使用**:列举了一些达梦数据库特有的连接属性及其用途。 - **Statement/PreparedStatement/CallableStatement**: - **Statement**...

    DM8程序员手册.pdf

    - 使用存储过程和函数:说明了如何在达梦数据库中使用和调用存储过程和函数。 ### 第4章 DMJDBC编程指南 - JDBC介绍:解释了JDBC(Java数据库连接)的基本概念及其在达梦数据库中的应用。 - JDBC基本示例:通过示例...

    Java基础学习44.pdf

    `QueryRunner`是DBUtils的核心类,提供了`update`、`query`和`batch`方法,这些方法的使用比直接使用JDBC更具有健壮性和易用性。例如,`QueryRunner.update`和`QueryRunner.query`分别用于执行更新和查询操作,它们...

    JSP_WEB程序设计从入门到精通

    要使用JDBC进行数据库操作,首先需要建立到数据库的连接,这通常通过DriverManager类和数据库URL完成。 #### JDBC发送SQL语句 一旦建立连接,就可以使用Statement对象或PreparedStatement对象执行SQL语句,实现数据...

    JSP程序设计从入门到精通

    JDBC API3.0版本的介绍,包括新增的特性,如ParameterMetaData接口和获取ParameterMetaData实例的方法。 #### 本章小结 对本章的内容进行总结,巩固所学的JSP基础和数据库操作的相关知识。 通过以上内容,可以...

    Java_Servlet_StudentInfo

    ​ MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 3 JSP 的开发模式 4 三层架构&MVC练习 5 学生信息管理...

Global site tag (gtag.js) - Google Analytics