封装JDBC____使用接口方式封装JDBC

 1、工具类DBUtil.java

package com.woow.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class DBUtil {

	private static final String DRIVERCLASS = "com.mysql.jdbc.Driver";
	private static final String URL = "jdbc:mysql://localhost:3306/dvdmanager?useUnicode=true&characterEncoding=UTF-8";
	private static final String USER = "root";
	private static final String PASSWORD = "123456";
	
	static {
		try {
			//加载驱动
			Class.forName(DRIVERCLASS);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取连接
	 * @return
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException {
		Connection conn = null;
		conn = DriverManager.getConnection(URL, USER, PASSWORD);
		return conn;
	}
	
	/**
	 * 获取statment对象
	 * @param conn 数据库连接对象
	 * @param sql
	 * @return
	 * @throws SQLException
	 */
	public static PreparedStatement getStatement(Connection conn, String sql) throws SQLException {
		PreparedStatement pstmt = conn.prepareStatement(sql);
		return pstmt;
	}
	
	/**
	 * 关闭连接,回收资源
	 * @param conn
	 * @param stmt
	 */
	public static void destory(Connection conn, Statement stmt) {
		try {
			conn.close();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 执行单行查询的方法
	 */
	public static <T> T query(String sql, ExtractData<T> ed, Object...objects) {
		Connection conn = null;
		T t = null;
		try {
			conn = getConnection();
			PreparedStatement pstmt = getStatement(conn, sql);
			//绑定参数
			for(int i = 0; i < objects.length; i++) {
				pstmt.setObject(i + 1, objects[i]);
			}
			//执行sql
			ResultSet rs = pstmt.executeQuery();
			if(rs.next()) {
				t = ed.extract(rs);
			}
			rs.close();
			destory(conn, pstmt);
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return t;
	}
}

2、接口ExtractData.java

package com.woow.utils;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public interface ExtractData<T> {

	/**
	 * 从结果集中提取数据封装成T对象
	 * @param rs  sql执行后的结果集
	 * @return
	 * @throws SQLException 
	 */
	T extract(ResultSet rs) throws SQLException;
	
}

3、使用封装好的工具

package com.woow.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.woow.domain.DVD;
import com.woow.utils.DBUtil;
import com.woow.utils.ExtractAll;
import com.woow.utils.ExtractData;

public class DVDDao3 {
	
	public static void main(String[] args) {
		DVDDao3 dao = new DVDDao3();
		DVD dvd = dao.getById(11);
		System.out.println(dvd);
	}
	
	public DVD getById(int id) {
		String sql = "select * from dvd where id = ?";
		DVD d = DBUtil.query(sql, new ExtractData<DVD>() {

			public DVD extract(ResultSet rs) throws SQLException {
				DVD dvd = new DVD();
				dvd.setId(rs.getInt(1));
            	                dvd.setName(rs.getString(2));
            	                dvd.setClazz(rs.getString(3));
            	                dvd.setTimelen(rs.getInt(4));
            	                dvd.setLanguage(rs.getString(5));
				return dvd;
			}
			
		}, id);
		return d;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值