JDBC简述
JDBC(Java DataBase Connectivity,java数据库连接) 是Java访问数据库的标准规范 是由各大数据库厂商来实现对应接口
JDBC简单使用
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.SQLException; 4 import java.sql.Statement; 6 public class Demo01_jdbc入门程序 { 8 public static void main(String[] args) { 10 Connection conn = null; 11 Statement st = null; 12 try { 13 //1 加载驱动 14 Class.forName("com.mysql.jdbc.Driver"); 16 //2 获得连接 17 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db0814","root","123"); 19 //3创建通道 20 st = conn.createStatement(); 22 String sql = "insert into student values(null,'李四',21,'1998-10-10')"; 24 //4执行sql 25 int result = st.executeUpdate(sql); // 5.处理结果集 ,返回值表示数据库中受影响的数据的条数 26 System.out.println(result); 27 //6关闭资源 28 st.close(); 29 conn.close(); 31 } catch (Exception e) { 32 e.printStackTrace(); 33 }finally{ 51 } 53 } 55 }
JDBC预通道
1 import com.offcn.util.DateUtil; 2 import com.offcn.util.JDBCUtil; 3 public class Demo01_PreparedStatement使用 { 4 /* 5 * PreparedStatement是Statement的子接口 6 * 7 * Statement的缺点: 8 * 1 拼接SQL过于繁琐 9 * 2 多条相似SQL 会每条SQL都进行编译,效率低 10 * 3 SQL注入攻击问题 11 12 * PreparedStatement: 13 * 1 不用拼接SQL 而是用? 占位,绑定参数的方式 14 * 2 预编译功能,相似操作只编译一次,提高效率 15 * 3 防止SQL注入攻击问题 16 * 17 * */ 18 public void test2(){ 19 Connection conn = null; 20 PreparedStatement ps = null; 21 try{ 22 conn = JDBCUtil.getConnection(); 23 String sql = "insert into student values(null,?,?,?)"; 24 ps = conn.prepareStatement(sql); // 这里就把sql进行了预编译,把sql编译成一个可执行的函数 例如: MYINSERT(?,?,?) 26 ps.setObject(1, name); 27 ps.setObject(2, Integer.parseInt(age)); 28 ps.setObject(3, DateUtil.stringToDate(birthday)); 29 30 int result1 = ps.executeUpdate(); 31 32 ps.setObject(1, name2); 33 ps.setObject(2, Integer.parseInt(age2)); 34 ps.setObject(3, DateUtil.stringToDate(birthday2)); 35 36 int result2 = ps.executeUpdate(); 37 38 System.out.println(result1+" "+result2); 40 }catch(Exception e){ 41 e.printStackTrace(); 42 }finally{ 43 JDBCUtil.closeAll(null, ps, conn); 44 } 45 }
连接池简述
原始:
创建连接
使用连接
销毁连接
连接池:
创建连接池
取用连接
归还连接
官方定义接口 DataSource 由厂商去实现
DBCP连接池、C3p0连接池、Druid连接池(阿里)
DBCP连接池和c3p0连接池的对比:
Dbcp:效率高,但是安全性一般 Apache软件基金会
C3p0:安全性很高,效率偏低
C3P0连接池
1 import java.sql.Connection; 2 import java.sql.PreparedStatement; 3 import java.sql.ResultSet; 4 5 import javax.sql.DataSource; 6 import com.mchange.v2.c3p0.ComboPooledDataSource; 7 import com.offcn.util.C3P0Util; 8 9 public class Demo01_C3P0使用 { 10 public static void main(String[] args) throws Exception{ 11 DataSource ds = new ComboPooledDataSource(); //默认加载src下的 c3p0-config.xml中的<default-config>的配置 12 DataSource ds = new ComboPooledDataSource("offcn");//加载src下c3p0-config.xml中 <named-config name="offcn">的配置 14 Connection conn = ds.getConnection(); 15 16 PreparedStatement ps = conn.prepareStatement("select * from student"); 17 ResultSet rs = ps.executeQuery(); 18 while(rs.next()){ 19 System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getInt("age")+" "+rs.getDate("birthday")); 20 } 22 rs.close(); 23 ps.close(); 24 conn.close(); 25 } 26 27 }
C3P0Util
1 import java.sql.Connection; 3 import javax.sql.DataSource; 5 import com.mchange.v2.c3p0.ComboPooledDataSource; 7 public class C3P0Util { 10 private static DataSource ds; 12 static{ 14 ds = new ComboPooledDataSource(); 15 } 18 public static DataSource getDataSource(){ 19 return ds; 22 public static Connection getConnection() throws Exception{ 23 return ds.getConnection(); 24 } 26 }
DBUtils工具
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写很多代码
Dbutils三个核心功能介绍
QueryRunner中提供对sql语句操作的API.(CRUD增删改查)
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法(事务)
数据更新
update(String sql,Object…param)
数据查询
query(String sql,handler,Object[] param)
ResultSetHandler结果集处理程序
BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
MapListHandler 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
数据库事务
四大特性(ACID)
原子性(Atomicity) 事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency) 事务前后数据的完整性必须保持一致
隔离性(Isolation) 是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个 并发事务之间数据要相互隔离,不能相互影响。
持久性(Durability) 指一个事务一旦被提交(commit),它对数据库中数据的改变就是永久性的,接下来即使数据库发 生故障也不应该对其有任何影响