Java 数据库链接、关闭、增删改查方法的封装(一)之JDBCUtil工具类

1.新建一个Java Project 工程,并建立 四个package 包,分别为 dao(存放接口)、daoImp(存放接口实现类)、entry(存放实体类)、util(数据库工具包)java

如图所示建立一个名为JDBC的工程,结构如图所示:mysql

2.导包,链接数据库咱们须要把mysql-connector-java-5.1.7-bin.jar导入到Java项目中。如图新建一个lib用来存放外jar的包。sql

选中加入的jar包,单击右键选择Build Path 中的 Add to Build Path。数据库

3.编辑util包,建立一个class其中编辑数据库的链接、关闭数组

public class JDBCUtil {
	private static final String driver="com.mysql.jdbc.Driver";
	private static final String url="jdbc:mysql://localhost:3306/students";
	private static final String user="root";
	private static final String password="root";
	static{
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static Connection getConnection(){
		
		try {
			return DriverManager.getConnection(url,user,password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
		
	}
      public static void close(ResultSet rs,PreparedStatement ps,Connection con){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				if(ps!=null){
					try {
						ps.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally{
						if(con!=null){
							try {
								con.close();
							} catch (SQLException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
					}
				}
			}
		}
	}

 

数据库的增删改方法,大部分写法相差无几,所以咱们给他们封装一个方法,三个类型方法皆可调用。工具

/***
	 * DML操做(增删改)
	 * 1.获取链接数据库对象
	 * 2.预处理
	 * 3.执行更新操做
	 * @param sql
	 * @param obj
	 */
	//调用者只需传入一个sql语句,和一个Object数组。该数组存储的是SQL语句中的占位符
	public static void executeUpdate(String sql,Object...obj){
		Connection con = getConnection();//调用getConnection()方法链接数据库
		PreparedStatement ps=null;
		try {
			 ps = con.prepareStatement(sql);//预处理
			for(int i=0;i<obj.length;i++){//预处理声明占位符
				ps.setObject(i+1, obj[i]);
			}
			ps.executeUpdate();//执行更新操做
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
	
			close( null, ps, con);//调用close()方法关闭资源
		}
	}

 

2.查询方法ui

/***
	 * DQL查询
	 * Result获取数据集
	 * 
	 * @param sql
	 * @param obj
	 * @return
	 */
	public static List<Map<String,Object>> executeQuery(String sql,Object...obj){
		Connection con = getConnection();
		ResultSet rs=null;
		PreparedStatement ps=null;
		try {
			ps = con.prepareStatement(sql);
			for(int i=0;i<obj.length;i++){
				ps.setObject(i+1, obj[i]);
			}
			rs = ps.executeQuery();
			//new 一个空的list集合用来存放查询结果
			List<Map<String ,Object>> list=new ArrayList<>();
			//获取结果集的列数
			int count = rs.getMetaData().getColumnCount();
			//对结果集遍历每一条数据是一个Map集合,列是k,值是v
			while(rs.next()){
				//一个空的map集合,用来存放每一行数据
				Map<String, Object> map=new HashMap<String, Object>();
				for(int i=0;i<count;i++){
					Object ob=rs.getObject(i+1);//获取值
					String key = rs.getMetaData().getColumnName(i+1);//获取k即列名
					map.put(key, ob);
				}
				list.add(map);
			}
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			
			close(rs, ps, con);
		}
		
		return null;
		
	}