javajdbc增删改查工具类

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

import com.mysql.jdbc.ResultSetMetaData;
import com.petshop.entity.Pet;

/**
 * 链接数据库的父类
 * 工具类:主要包含连接对象。释放资源等方法
 * @author 苏烁坚
 *
 */

public class BaseDao {
	Connection con=null;//获取连接对象
	PreparedStatement ps=null;
	ResultSet rs=null;
	private static String url="jdbc:mysql://localhost:3306/petshop";
	private static String user="root";
	private static String password="root";
	
	/**
	 * 
	 * 释放工具类的参数资源
	 */
	
	public void closeBaseDao(){
		if(this.rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(this.ps!=null){
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if(this.con!=null){
			try {
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	
	
	/**
	 * 获取连接对象
	 * @return
	 */
	public Connection getConnection(){
		try {
			//1、加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//2、通过驱动管理类获取一个连接对象
			con=DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return con;//得到连接对象
	}

	/**
	 * 释放资源方法
	 * @param rs
	 * @param ps
	 * @param con
	 */
	public void close(ResultSet rs,PreparedStatement ps,Connection con){
		if(rs!=null){
			try {
				rs.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(con!=null){
			try {
				con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 公共的增删改方法
	 * @param sql 执行SQL语句
	 * @param param	参数,SQL中需要赋值的参数(不定参)
	 * @return 返回受影响的行数
	 */
	public int executeUpdate(String sql,Object...params){	
		//定义一个发送SQL语句对象
		con=this.getConnection();
		try {
			ps=con.prepareStatement(sql);
			//执行SQL语句之前先判断是否需要给SQL语句赋值
			if(params!=null){
				//for循环赋值
				for (int i = 0; i < params.length; i++) {
					//给当前第i+1个?赋值。职位params[下标]类似数组
					ps.setObject(i+1, params[i]);
				}
			}
			return ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return 0;	//失败返回0

	}
	/**
	 * 公共的查询方法
	 * @param <T>
	 * @param sql	要发送的sql语句
	 * @return ResultSet
	 */
	public <T> List<T> getResultSet(Class<T> Class,String sql,Object...params){
		con=this.getConnection();
		BaseDao bd=new BaseDao();
		try{
			ps=con.prepareStatement(sql);
			List<T> myList=new ArrayList<>();
			if(params!=null){
				//for循环赋值
				for (int i = 0; i < params.length; i++) {
					//给当前第i+1个?赋值。职位params[下标]类似数组
					ps.setObject(i+1, params[i]);
				}
			}
			rs=ps.executeQuery();
			while(rs.next()){
				//ResultSetMetaData可以获取关于 ResultSet 对象中列的类型和属性信息的对象
				java.sql.ResultSetMetaData metaData=rs.getMetaData();//检索此ResultSet对象的列的数量、类型和属性
				int count=metaData.getColumnCount();//获取结果集总列数
				T obj=Class.newInstance();//获取类对象的实例
				for (int i = 0; i <count; i++) {		
					Object value=rs.getObject(i+1);//获取对应列的值
					String columnName=	metaData.getColumnName(i+1);//获取对应的列名
					Field field=Class.getDeclaredField(columnName);//通过列名获取字段对象,也就是属性;
					field.setAccessible(true);//取消访问权限的限制
					field.set(obj, value);//将获取到的值,存到对应的类对象实例里面
				}
				myList.add(obj);//然后返回该结果集对象
			}
			return myList;
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			bd.close(rs, ps, con);
		}
		return null;
	}
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值