一:以MySQL数据库讲解为主,Oracle数据库和Sqlervler(只在windows下能用),sqllite嵌入式数据库应用在移动端(手机)小型数据库。
二:数据库简介,安装Mysql数据库。我就不详细说啦!!!
JDBC提供连接所有数据库的接口。可以连接全世界所有数据库
代码的规范化,前提你要在Java项目中导入MySQL数据库连接驱动包。
JDBC主要对象介绍
0:先加载驱动包
1:DriverManager Connection conn = DriverManager.getConnection(url, user, pwd);创建连接对象
2:Connection Statement stmt = conn.createStatement(); 创建执行sql语句的statement对象
Statement stmt = conn.createStatement(int,int); 其中的两个参数是用来确定创建的Statement能生成什么样的结果集
3:Statement
Statement最为重要的方法是:
int executeUpdate(String sql):可以执行DDL和DML语句,即可执行insert、update、delete语句和create table、alter table、drop table等语句,返回成功执行的记录数;
ResultSet executeQuery(String sql):执行DQL查询语句,执行查询操作会返回ResultSet结果集。
boolean execute():可以执行前两个方法能执行的SQL语句,该方法用来执行增、删、改、查所有的SQL语句,返回值为boolean类型,表示执行的SQL语句是否有结果。
如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数;
如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。
4:ResultSet之滚动结果集
ResultSet表示结果集,它是一个二维的表格。ResultSet内部维护一个行光标(游标),光标位置从1开始。Result提供了一系列的方法来移动游标:
5:ResultSet之获取列数据
6: PreparedStatement
PreparedStatement是Statement接口的子接口,
其特点是:
用法:
7:JDBCUtils工具类
连接数据库的四大参数是:驱动类、URL、用户名、密码,这些参数都是与特定数据库关联,如果将来想要更改数据库,那么就要去修改这四大参数,那么为了不去修改代码,我们需要写一个JDBCUtils类,让它从配置文件中读取配置参数,然后创建连接对象。(就是连接数据库需要的参数都由JDBCUtils)
8:UserDao
DAO(Data Access Object)模型就是写一个类,把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间。
9:时间类型
时间类型的转换
因为java.util.Date是java.sql.Date/Time/Timestamp的父类,所以我们可以使用以下方式完成转换:
10:Statement批处理,PreparedStatement批处理
1、事务概述
2、事务隔离级别(四大隔离级别)
用池来管理Connection,这样就可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
1:C3P0数据连接池
使用类实现,使用配置文件实现
2、ThreadLocal(相当一个连接池)
ThreadLocal通常用在一个类的成员上,多个线程访问它时,每个线程都有自己的副本,互不干扰。在Spring中把Connection放到ThreadLocal中。
1、优化Dao模型层------>数据更新 数据查询
2、dbUtils工具 需要导入的jar包(对数据的增删改封装)
1:dbUtils中对数据的动态操作使用的是QueryRunner对象
2、QueryRunner对象介绍
3、ResultSetHandler接口(对数据的查询封装)
BeanListHandle
MapHandler
MapListHandle
ScalarHandle
查询数据也就是用这四个类来回变化,已经给你封装好的工具,看手册会用就行啦!!!
1、优化JDBCUtil工具类(把事务从DAO层转移到service层处理)
JDBCUtil称为了DAO和Service的中介。以前事务处理是在DAO层处理的,需要调用connection的方法处理,service层没有conncetion。因为事务处理是业务,所有应该放在service层处理。
在Service中现在就调用这三个方法来完成事务的处理:
public class DemoService { private DemoDao demoDao = new DemoDao(); public void method(){ try { //开启事务 JDBCUtil.beginTransaction(); demoDao.update(...); demoDao.update(...); //提交事务 JDBCUtil.commitTransaction(); } catch (SQLException e) { //事务回滚 JDBCUtil.rollbackTransaction(); } } } |
下面对JDBCUtil.java类的优化,让以前在dao层的东西,现在封装到JDBCUtil中,以实现在service层的调用。
2、JDBCUtil处理多线程并发问题(以前在dao层可以处理高并发的事件,现在在service层也要处理高并发的事件)
JDBCUtil工具类优化
当有多个线程操作JDBCUtil中的Connection对象时,就会出现并发问题,可以使用ThreadLocal来解决这个问题。
总结:
数据库中数据的增删改查高并发时:用数据连接池来解决
JDBC事务以前是放在dao层现在放在service层,JDBCUtil处理事务多线程并发问题:当有多个线程操作JDBCUtil中的Connection对象时,就会出现并发问题,可以使用ThreadLocal来解决这个问题。
表示层-------->业务逻辑层---------->持久层------->数据库/硬盘
jsp/html------->java/php/asp-------->jdbc/dao------>mysql/oracle
view----------->service-----jdbcutil----->dao---------->mysql/Oracle
现在处理事务直接用jdbutil,直接写在service层。再使用dao层操作数据库。
以前是没在service层写,在dao层调用,使用connection对象的方法处理事务。
dbutil工具是优化dao层的操作。增删改数据进行封装优化,方面增删改数据。对查询数据进行封装优化,方面查询处理数据。