使用jbc查询数据封装成对象的工具类

package com.briup.jdbctest;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class JDBCUtils {
	private static Connection conn = null; // 连接对象
	private static String driver = "oracle.jdbc.driver.OracleDriver"; // jar包中的OracleDriver中的类
	private static String url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl";
	private static String username = "scott";
	private static String password = "tiger";
	private static PreparedStatement ps = null;
	private static ResultSet rs = null;

	public static Connection getConnection() {

		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}

	// 将表中的数据封装成所有对象
	/**
	 *
	 * @param <T>   封装对象的泛型
	 * @param clazz
	 * @param sql   sql语句
	 * @param args  给预编译语句传参
	 * @return
	 */
	public static <T> List<T> queryToObj(Class<T> clazz, Connection conn, String sql, Object... args) {

		try {
			// 1. 获取结果集
			ps = conn.prepareStatement(sql);
			for (int i = 1; i <= args.length; i++) {
				ps.setObject(i, args[i - 1]);
			}
			rs = ps.executeQuery();

			// 2. 将查询的结果和字段名称获取 获取所有的字段
			ResultSetMetaData metaData = rs.getMetaData();

			// 用来保存对象的
			ArrayList<T> cols = new ArrayList<>();
			while (rs.next()) {
				// 创建对象
				T obj = clazz.newInstance();
				for (int i = 1; i <= metaData.getColumnCount(); i++) {
					// 通过反射获取对应的字段
					Field filed = clazz.getDeclaredField(metaData.getColumnLabel(i).toLowerCase());
					filed.setAccessible(true);
					Object value = rs.getObject(metaData.getColumnLabel(i));
					// oralce的number 在java中的是BigDecimal
					if (value instanceof BigDecimal) {
						value = ((BigDecimal) value).intValue();
					}
					filed.set(obj, value);
				}
				cols.add(obj);
			}
			return cols;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			Close(conn, ps, rs);
		}
		return null;

	}

	// 释放资源
	private static void Close(Connection conn, PreparedStatement ps, ResultSet rs) {

		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {

		Connection connection = getConnection();
		String sql = "select * from stu where id=? or id=?";
		List<Stu> list = queryToObj(Stu.class, connection, sql, 1, 2);
		for (Stu stu : list) {
			System.out.println(stu);
		}

	}
}

  

原文地址:https://www.cnblogs.com/codlover/p/11491020.html

时间: 2024-10-15 23:41:08

使用jbc查询数据封装成对象的工具类的相关文章

获取数据库连接对象的工具类

mysql连接对象 jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/查找的文件jdbc.user=rootjdbc.password=自己设置的密码 oracle连接对象 jdbc.driver=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@localhost:1521:orcljdbc.user=scottjdbc.password=

通过反射克隆对象,对象复制(克隆),对象合并工具类 升级版

先上代码,有时间再详说: package com.kaiyuan.common.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 通用对象co

weixin4j开发—为大家提供一个获取Weixin对象的工具类

如果大家下载了weixin4j的话,那么这个工具类对大家使用weixin4j将是一个非常好用的工具类. 首先我创建了一个数据表,来存放access_token CREATE TABLE `t_token` ( `id` int(11) NOT NULL AUTO_INCREMENT, `access_token` varchar(120) NOT NULL, `expires_in` int(11) NOT NULL, `createTime` datetime NOT NULL, PRIMAR

对象序列化工具类

这个类中提供了对象序列化与反序列化的方法,在实际的项目中会经常被用到. 1 import java.io.*; 2 3 public class SerializationUtils { 4 5 //把一个对象序列化 6 public static byte[] serialize(Object state) { 7 ObjectOutputStream oos = null; 8 try { 9 ByteArrayOutputStream bos = new ByteArrayOutputSt

将JSON转换成MAP的工具类

package com.xxxx.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import ja

通过反射克隆对象,对象复制(克隆)工具类

最近做的项目中,经常会遇到用视图来操作数据库的,但是页面需要的则是某个实体对象,在controller层查出list<view> 还要把将view对象转化成entity对象.需要写一大堆的get和set方法,而且如果实体增删字段的话,还需要把转化代码再修改一下,让人头疼. 当我需要操作一个实体对象完成两件不同的事情,这2个方法中会修改实体对象中的属性,第一个方法调用后,再调用第二个方法时,会受影响.为了保证不受影响,必须copy一份属性值一模一样的实体.这时候就需要一个工具类来完成了. 本着磨

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

关于Java中何时使用static和工具类相关知识

一.使用static修饰变量:当对象中出现共享数据时,该数据被静态修饰,对象中的特有数据要定义成非静态存放于堆内存中. 二.使用static修饰静态函数:当该函数内部没有访问到非静态数据(对象特有数据)时,可以定义为静态的. 三.工具类是为了封装功能(对象时为了封装数据),工具类中没有属性数据,只有实现各种功能的方法,这些方法都是静态的.为了防止其他类中创建工具类的对象(工具类对象毫无意义),所以可以对工具类的构造方法私有化.工具类中不需要对外开放的方法(这些方法功能工具类中其他方法调用)也要私

Lucene5学习之LuceneUtils工具类简单封装

花了整整一天时间,将Lucene5中有关索引的常见操作进行了简单封装,废话不多说,上代码: package com.yida.framework.lucene5.util; import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; i