JDBC 操作类封装

DBUtil.java 是一个Java类,用于封装JDBC操作,包括连接数据库、设置SQL参数、执行查询和更新操作。它使用了try-catch-finally结构来处理SQLException,提供了一个构造方法初始化数据库连接信息,并能将查询结果转换为List<Map<String, String>>或单个Map对象。
摘要由CSDN通过智能技术生成

#JDBC 操作类封装
DBUtil.java

package util;

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.HashMap;
import java.util.List;
import java.util.Map;

public class DBUtil {
	private String driver;
	private String url;
	private String username;
	private String password;
	private Connection con;
	private PreparedStatement pstmt;
	private ResultSet rs;
	public void setDriver(String driver) {
		this.driver = driver;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	//构造方法,定义驱动程序连接用户名和密码信息
	public DBUtil() {
		driver="com.mysql.jdbc.Driver";
		url="jdbc:mysql://localhost:3306/book";
		username="root";
		password="root";
	}
	//获取连接对象
	public Connection getConnnection() {
		try {
			Class.forName(driver);
			con=DriverManager.getConnection(url,username,password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} 
		return con;
	}
	//获取语句对象
	private PreparedStatement getPrepareStatement(String sql) {
		try {
			pstmt=getConnnection().prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return pstmt;
	}
	//给pstmt的SQL语句设置参数(要求参数以数组形式给出)
	private void setParams(String sql,String [] params) {
		pstmt=this.getPrepareStatement(sql);
		for(int i=0;i<params.length;i++) {
			try {
				pstmt.setString(i + 1, params[i]);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	//执行数据库查询操作时,将返回的结果封装到List对象中
	public List getList(String sql,String [] params) {
		List list=new ArrayList();
		try {
			this.setParams(sql, params);
			ResultSet rs = pstmt.executeQuery();
			ResultSetMetaData rsmd=rs.getMetaData();
			while(rs.next()) {
				Map m=new HashMap();
				for(int i=1;i<rsmd.getColumnCount();i++) {
					String colName=rsmd.getColumnName(i);
					m.put(colName, rs.getString(colName));
				}
				list.add(m);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			close();
		}
		return list;
	}
	
	//执行数据库查询操作时,将返回的结果封装到List对象中
	public Map getMap(String sql,String [] params) {
		List list=getList(sql,params);
		if(list.isEmpty())
			return null;
		else
			return (Map)list.get(0);
	}
	
	//更新数据库时调用的update方法
	public int update(String sql,String [] params) {
		int recNo=0;		//表示受影响的记录行数
		try {
			setParams(sql,params);		//根据sql和params,设置pstmt对象
			recNo=pstmt.executeUpdate();	//执行更新操作
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			close();
		}
		return recNo;
	}
	
	//关闭对象
	private void close() {
		try {
			if(rs!=null)
				rs.close();
			if(pstmt!=null)
				pstmt.close();
			if(con!=null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}

该代码摘于《Java Web核心技术教程》

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值