java:JDBC的使用与封装

JDBC连接过程:

1.导入相关的JDBC驱动jar包;

①:新建一个文件夹,命名为lib;

在这里插入图片描述

②:将jar包粘贴至此文件夹;

在这里插入图片描述

③:右键jar包,Add to Build Path;

在这里插入图片描述

④:完成。

在这里插入图片描述

2.注册驱动,把mysql的Driver对象注册到java.sql.Drivermanager中;

Class.forName("com.mysql.jdbc.Driver");

3.建立连接;

Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

4.SQL业务操作;

首先简单介绍一下连接的数据库book:

只有两个表:user和bookmessage。

①:user

在这里插入图片描述

②:bookmessage

在这里插入图片描述
uid为外键,下面的业务操作只用到表bookmessage。

①:Statement;
(1)查询操作:

	Statement stmt = null;
	ResultSet rs = null;
	List<book> list = new ArrayList<book>();
	
	String sql ="select * from bookmessage";
	
	rs = stmt.executeQuery(sql);//查询
	
	while(rs.next()) {
		int bid = rs.getInt(1);//bid数据类型为int
		String name = rs.getString(2);//bookname数据类型为String
		int uid = rs.getInt(3);//uid数据类型为int
	    //System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getInt(3));直接打印表的信息;
	    book b = new book(bid,name,uid);//构建book类打印表的信息
		list.add(b);//加入book类list
	}
	//打印
	for(int i=0;i<list.size();i++) {
		System.out.println(list.get(i).getBid()+"\t"+list.get(i).getBookname()+"\t\t"+list.get(i).getUid());
	}

book类:

package JDBC;

public class book {
	
	private int bid;
	private String bookname;
	private int uid;
	
	public book() {
		
	}
	
	public book(int bid,String bookname,int uid) {
		this.bid = bid;
		this.bookname = bookname;
		this.uid = uid;
	}

	public int getBid() {
		return bid;
	}

	public void setBid(int bid) {
		this.bid = bid;
	}

	public String getBookname() {
		return bookname;
	}

	public void setBookname(String bookname) {
		this.bookname = bookname;
	}

	public int getUid() {
		return uid;
	}

	public void setUid(int uid) {
		this.uid = uid;
	}
}
(2)删除操作:
	Statement stmt = null;
	
	String sql ="delete from bookmessage where bid =6";
	stmt = conn.createStatement();
	int v = stmt.executeUpdate(sql);//添加 修改 删除时 返回受影响的行数;
	if(v>0) {
		System.out.println("success");
	}else {
		System.out.println("fail");
	}

添加和修改就不一一进行演示了,接下来介绍PreparedStatement。

②:PreparedStatement。

PreparedStatement有预编译功能,可以防止sql注入,安全性更高。

举一个添加的例子:
			String sql ="insert into bookmessage values(?,?,?)";
			int bid = 7;
			String bookname ="林清玄散文精选";
			int uid = 3;
			pstmt = conn.prepareStatement(sql);
			//给定参数位置从左到右依次为1,2,3,4 ~~
			pstmt.setInt(1,bid);//第一个?处设置参数bid
			pstmt.setString(2,bookname);//第二个?处设置参数bookname
			pstmt.setInt(3,uid);//第三个?处设置参数uid
			
			int v = pstmt.executeUpdate();
			if(v>0) {
				System.out.println("success");
			}else {
				System.out.println("fail");
			}

5.关闭资源。

执行完sql业务后,关闭使用的资源,要进行判空。

	if(null != rs) {
		rs.close();
	}
	if(null != stmt) {
		stmt.close();
	}
	if(null != pstmt) {
		pstmt.close();
	}
	if(null != conn) {
		conn.close();
	}

JDBC封装:

既然我们了解了JDBC连接的过程,那么我们大致可以将其分为三个部分:sql业务操作前为第一部分,准备部分,需要进行注册和连接;sql业务操作为第二部分;最后一部分为关闭资源。那么除第二部分sql业务操作外,其余两部分可以封装在一个工具类中。

第一部分,准备:

注册驱动可以放在静态块中,进行类的初始化:

	static {
		try {
			Class.forName(DRIVERPATH);
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

获取Connection对象:

	public static Connection getConn() {
		synchronized(DBconUtil.class) {
			try {
				if(null == conn || conn.isClosed()) {
					synchronized(DBconUtil.class) {
						conn = DriverManager.getConnection(URL,USER,PASSWORD);
					}
				}
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
		return conn;
	}
关闭资源:

用stmt可以把pstmt的位置填null,用pstmt可以把stmt的位置填null。

public static void close(Connection con,PreparedStatement pstmt,Statement stmt,ResultSet rs) {
		try {
			if(null != rs) {
				rs.close();
			}
		}catch(SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(null != stmt) {
					stmt.close();
				}
			}catch(SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if(null != pstmt) {
						pstmt.close();
					}
				}catch(SQLException e) {
					e.printStackTrace();
				}finally {
					//关闭资源
						try {
							if(null != conn) {
								conn.close();
							}
						}catch(SQLException e) {
							e.printStackTrace();
						}
					
				}
			}
		}
	}
DBconUtil类:

最后附上封装类,整理不易。

package JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBconUtil {

	private static final String URL = "jdbc:mysql://127.0.0.1:3306/book";
	private static final String USER = "root";
	private static final String PASSWORD = "123456";
	private static final String DRIVERPATH = "com.mysql.jdbc.Driver";
	private static Connection conn = null;
	Statement stmt = null;
	
	static {
		try {
			Class.forName(DRIVERPATH);
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConn() {
		synchronized(DBconUtil.class) {
			try {
				if(null == conn || conn.isClosed()) {
					synchronized(DBconUtil.class) {
						conn = DriverManager.getConnection(URL,USER,PASSWORD);
					}
				}
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
		return conn;
	}
	
	public static void close(Connection con,PreparedStatement pstmt,Statement stmt,ResultSet rs) {
		try {
			if(null != rs) {
				rs.close();
			}
		}catch(SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(null != stmt) {
					stmt.close();
				}
			}catch(SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if(null != pstmt) {
						pstmt.close();
					}
				}catch(SQLException e) {
					e.printStackTrace();
				}finally {
					//关闭资源
						try {
							if(null != conn) {
								conn.close();
							}
						}catch(SQLException e) {
							e.printStackTrace();
						}
					
				}
			}
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章