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

Posted codlover

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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);
		

	

  

以上是关于使用jbc查询数据封装成对象的工具类的主要内容,如果未能解决你的问题,请参考以下文章

利用Jackson封装常用JsonUtil工具类

MySQLDB类工具的封装

MyBatisPlus查询对象转QueryWrapper工具类

开发自己的框架——数据库工具类的封装

DBUtils框架的使用(下)

springboot中集成redis,二次封装成工具类