Java泛型方法与数据查询
在使用JDBC查询数据库中数据时,返回的结果是ResultSet对象,使用十分不方便。Commons DbUtils组件提供了将ResultSet转化为Bean列表的方法,但是该方法在使用时需要根据不同的Bean对象创建不同的查询方法。本实例将在该方法的基础上使用泛型进行包装,使其通用性更强。
思路分析:
- 凡是要进行数据库操作的肯定都要额外导入包,比如mysql-connector-java-5.1.6-bin.jar与commons-dbutils-1.3.jar。我就很奇怪为毛JDK的默认包里不带这些呢。导入包的操作为在项目的“JRE系统库”选项上单击鼠标右键,选择构建路径——>配置构建路径——>添加外部JAR,如图所示: 
- 从数据表里查询信息后,要想将查到的信息分别显示出来,就得根据数据表的结构来定义类了,一般来说,对于要显示的每个字段,都要在类中为其定义成员变量、get()方法与set()方法,代码如下:Books.java:
package cn.edu.xidian.crytoll; public class Books { private int id;
 private String name; public int getId() {
 return id;
 } public void setId(int id) {
 this.id = id;
 } public String getName() {
 return name;
 } public void setName(String name) {
 this.name = name;
 } @Override
 public String toString() {
 return id + ":" + name;
 }
 }
- 接下来要编写数据库操作类,在该类中定义数据库进行连接、查询等操作的方法。因为是泛型查询,所以查询方法的返回值就是<T> List<T>类型的,参数嘛一个是SQL语句,一个就是上一步定义的类Class<T> type了,代码如下:GenericQuery.java:
package cn.edu.xidian.crytoll; 
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.List;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.commons.dbutils.QueryRunner;
 import org.apache.commons.dbutils.handlers.BeanListHandler; public class GenericQuery { private static String URL = "jdbc:mysql://localhost:3306/db_database13";
 private static String DRIVER = "com.mysql.jdbc.Driver";
 private static String USERNAME = "root";
 private static String PASSWORD = "密码";
 private static Connection conn; public static Connection getConnection() {
 DbUtils.loadDriver(DRIVER);
 try {
 conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 } catch (SQLException e) {
 e.printStackTrace();
 }
 return conn;
 } public static <T> List<T> query(String sql, Class<T> type) {
 QueryRunner qr = new QueryRunner();
 List<T> list = null;
 try {
 list = qr.query(getConnection(), sql, new BeanListHandler<T>(type));
 } catch (SQLException e) {
 e.printStackTrace();
 } finally {
 DbUtils.closeQuietly(conn);
 }
 return list;
 }
 }
- 最后就是编写主方法啦,在主方法中创建一个泛型对象,并调用上一步中的查询方法,然后使用foreach()循环将要查询的信息显示出来,代码如下:
GenericQueryTest.java: package cn.edu.xidian.crytoll; import java.util.List; public class GenericQueryTest {
 public static void main(String[] args) {
 String sql = "select * from books;";
 List<Books> list = GenericQuery.query(sql, Books.class);
 System.out.println("明日科技新书:");
 for (Books books : list) {
 System.out.println(books);
 }
 }
 }效果如图:  
Java泛型方法与数据查询的更多相关文章
- java连接mysql数据查询数据
		package com.cn.peitest.connectDatabase; import java.sql.Connection; import java.sql.DriverManager; i ... 
- Java网页数据采集器[下篇-数据查询]【转载】
		本期概述 上一期我们学习了如何将html采集到的数据存储到MySql数据库中,这期我们来学习下如何在存储的数据中查询我们实际想看到的数据. 数据采集页面 2011-2012赛季英超球队战绩 如果是初学 ... 
- Elasticsearch集群搭建及使用Java客户端对数据存储和查询
		本次博文发两块,前部分是怎样搭建一个Elastic集群,后半部分是基于Java对数据进行写入和聚合统计. 一.Elastic集群搭建 1. 环境准备. 该集群环境基于VMware虚拟机.CentOS ... 
- GeoMesa Java API-写入与查询数据
		GeoMesa Java API-写入与查询数据 写入数据 DataStore SimpleFeatureType SimpleFeature 写入 查询数据 几个常用查询条件 设置最大返回条目: 设 ... 
- 技术分享:如何用Solr搭建大数据查询平台
		0×00 开头照例扯淡 自从各种脱裤门事件开始层出不穷,在下就学乖了,各个地方的密码全都改成不一样的,重要帐号的密码定期更换,生怕被人社出祖宗十八代的我,甚至开始用起了假名字,我给自己起一新网名”兴才 ... 
- Spring Data:企业级Java的现代数据访问技术(影印版)
		<Spring Data:企业级Java的现代数据访问技术(影印版)>基本信息原书名:Spring Data:Modern Data Access for Enterprise Java作 ... 
- 数据库(学习整理)----4--Oracle数据查询(基础点1)
		其他: 计算机中的内存是线性的,一维. length('')计算字符的个数,而不是字节的个数 Oracle中的日期类型和数值类型的数据可以做运算符(>,=,<,<>)比较 如果 ... 
- 工作流activiti-03数据查询(流程定义 流程实例 代办任务) 以及个人小练习
		在做数据查询的时候通过调用api来查询数据是相当的简单 对分页也进行了封装listPage(0, 4) ;listPage:分页查询 0:表示起始位置,4:表示查询长度 但是公司的框架封装了分页数据 ... 
- JDBC在javaweb中的应用之分页数据查询
		分页查询 分页查询是java web开发中经常使用到的技术.在数据库中数据量非常大的情况下,不适合将所有的数据全部显示到一个页面中,同时为了节约程序以及数据库的资源,就需要对数据进行分页查询操作. 通 ... 
随机推荐
- 服务器cpu过高修复:操作系统内核bug导致
			服务器cpu过高修复:操作系统内核bug导致修改系统内核参数/etc/sysctl.conf添加下面2条参数:vm.dirty_background_ratio=5vm.dirty_ratio=10 
- Numpy的线性代数
			线性代数的矩阵乘法 线性代数(如矩阵乘法.矩阵分解.行列式以及其他方阵数学等)是任何数组库的重要组成部分.不想某些语言(如MATLAB), 通过*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩 ... 
- 情商UP:不遵守八小时工作制,你就能富起来??
			从工作第一天起,我们就默认了八小时工作制,但从没有想过,这是不是最高效的工作时间. 事实上,八小时工作制并没有科学依据,不过是多年来约定俗成的习惯罢了. 那些坚守八小时工作制的人和敢于打破它的人,都获 ... 
- OpenStack若干概念
			近期在部署OpenStack时涉及到各个服务之间的诸多概念,这里简要记录其中的一些作为备忘. 服务(service) 在OpenStack中,一个服务有若干端点,用户通过端点访问服务并使用服务提供的功 ... 
- EF5+MVC4系列(8) ActionResult的返回值
			我们在MVC的代码中,经常会看到这样的一个 代码 可能有人会有疑问,既然我定义的是ActionResult,为什么返回值会是View方法呢? 其实这个View方法的返回值的类型是ActionResul ... 
- XSD 数据类型
			字符串数据类型(String Data Type) 字符串数据类型可包含字符.换行.回车以及制表符. 下面是一个关于某个 scheme 中字符串声明的例子: <xs:element name=& ... 
- ecshop You don't have permission to access / on this server
			回复 6# 晓天 确实是这个短标签的事情,谢谢了啊. 第一种方法:替换程序里的内容,以后就省心了. 针对所有的php脚本 在DW里面运行查找替换l 主要做替换操作 当然是短标签替换为整标签 注意顺序 ... 
- php 字符串 以 开头 以结尾 startWith endWith
			From: http://www.shipingzhong.cn/node/1217 //第一个是原串,第二个是 部份串function startWith($str, $needle) { retu ... 
- 边框颜色为 tintColor 的 UIButton
			创建一个 UIButton 的子类,重写其方法: - (void)drawRect:(CGRect)rect { [[self layer] setCornerRadius:CORNER_RADIUS ... 
- iOS:DKLiveBlur
			https://github.com/kronik/DKLiveBlur Sources of DKLiveBlur and Demo app to show live blur effect sim ... 
