JDBC和数据库连接池
JDBC:
Java Database Connectivity
JDBC实际上就是用于访问各种关系型数据库的一组API。
这个API不是数据库厂商定制的,而是Java统一进行定制的,各个数据库的厂商都来支持这个API,这样的话,我们使用同样的一组API,我们就可以通过Java程序访问各个关系型数据库了。
使用JDBC的步骤:
1.加载驱动
JDBC只是一个访问数据库的标准,它本身是不能访问数据库的,我们想要访问数据库必须使用数据库厂商给我们封装好的API,也就是说给我们封装好的一些类,而这些类都封装在JDBC的驱动之中,我们想要使用,我们就需要去加载JDBC的驱动。
2.连接数据库
3.操作数据库
4.关闭数据库连接
为了方便,我们一般会创建一个DBTools
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; public class DBTools { private static Connection conn = null; private static final String URL = "jdbc:mysql://localhost:3306/数据库名"; private static final String USER = "root";//数据库用户名称 private static final String PASSWORD = "root";//密码 private static PreparedStatement pstat = null; private static ResultSet rs = null; static{ //加载驱动 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //编写一个方法获取数据库的连接对象 public static Connection getConn(){ if(conn==null){ try { conn = DriverManager.getConnection(URL, USER, PASSWORD); conn.setAutoCommit(false); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return conn; } public static void execute(String sql,Object...objs){ conn = getConn(); try { pstat = conn.prepareStatement(sql); if(objs!=null){ for(int i=0;i<objs.length;i++){ pstat.setObject(i+1, objs[i]); } } pstat.execute(); commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); rollback(); } } public static List<Object[]> executeQuery(String sql,Object...objs){ List<Object[]> list = new ArrayList<Object[]>(); conn = getConn(); try { pstat = conn.prepareStatement(sql); if(objs!=null){ for(int i=0;i<objs.length;i++){ pstat.setObject(i+1, objs[i]); } } rs = pstat.executeQuery(); while(rs.next()){ Object[] obj = new Object[rs.getMetaData().getColumnCount()]; for(int i=0;i<obj.length;i++){ obj[i] = rs.getObject(i+1); } list.add(obj); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { close(); } return list; } public static void commit(){ if(conn!=null){ try { conn.commit(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { close(); } } } public static void rollback(){ if(conn!=null){ try { conn.rollback(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { close(); } } } public static void close(){ if(pstat!=null){ try { pstat.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { conn = null; } } } }