JDBC学习笔记(4)

回顾,项目的开发步骤:
1) com.zhtm.sql包            建表SQL语句
2) com.zhtm.conf包                创建.properties文件
3) com.zhtm.util包            创建JdbUtil工具类

static{
    InputStream is = JdbcUtil.class.getResourceAsStream("/com/zhtm/conf/db.properties");
    prop.load(is);
}
public static Connection getConnection() throws Exception{}
public static void release(rs, stm, conn) throws Exception{}

4) com.zhtm.test包        测试JdbcUtil的创建连接方法
5) com.zhtm.entity包        创建实体类
                    根据表结构,创建实体类
                    字段                    属性
                                                get/set方法
6) com.zhtm.dao包            创建PersonDao类

public void insert(Person p) throws Exception{}
public void update(Person p)throws Exception{}
public void delete(int no)throws Exception{}
public List<Person> selectAll()throws Exception{}
public Person selectOne(int no) throws Exception{}

注意:写1个方法,测试1个方法



JDBC中的分层:
一、数据访问层DAO【重点】
    作用: 对数据库进行增删改查操作。(ORM)
    包:com.zhtm.dao
    类命名规范:表名+Dao
    
二、业务层Service【重点】
    作用:专注于实现用户的业务需求。通常业务步骤 最终落实到 增删改查操作上。
    注意:业务层 必须进行事务的处理,确保所有步骤都成功业务成功;有一个步骤失败,该业务失败。
    包结构:com.zhtm.service
    类命名规范:和实际需求相关(BankService)
    
    JDBC中,默认1条SQL语句执行后,事务会自动提交。
    
    事务的提交/回滚:
        1) 修改事务的提交方式 为手动提交

conn.setAutoCommit(false);            //true,代表自动提交

2) 事务提交/回滚

 conn.commit();
 conn.rollback();

业务方法的书写步骤【重点】:
        1) 调用工具类,获取连接
        2) 设置事务的提交方式 为手动提交
        3) 分别调用DAO的不同方法,实现业务步骤
        4) 事务提交/回滚
        5) 调用工具类的方法,释放资源
        
    彻底解决事务控制以及多线程并发访问的问题【重难点】:
        使用线程局部变量 ThreadLocal类:  
            ThreadLocal t = new ThreadLocal();
            t.set(obj);  //往线程变量中设值
            obj = t.get();    //获取线程局部变量的值
            t.remove();    //删除线程局部变量的值
            
    解决方案:
        1) 修改JdbcUtil的代码:
                a) 增加成员变量

private static final ThreadLocal<Connection> t = new ThreadLocal<Connection>();

b) 修改getConnection方法

Connection conn = t.get();
      if (conn == null){
      //注册驱动
      //创建连接
      //给线程局部变量设值
      t.set(conn);
}

c) 修改release方法

if (conn!=null){
    conn.close();
    t.remove();//删除线程局部变量中的值 *****必须要有*****
}

2) 在DAO层不能关闭conn,应该在service层。
    
三、显示层View
    作用:专注于 提供用户的输入/输出界面。
    该层不属于JDBC的内容,属于CoreJava的内容。
    
四、分层的好处
    1、各司其职
    2、有利于团队建设
    
总结,项目开发步骤:
    1) com.zhtm.sql包            建表语句
    2) com.zhtm.conf包        创建配置文件db.properties
    3) com.zhtm.util包            创建JdbcUtil
    4) com.zhtm.test包            测试JdbcUtil的getConnection方法
    5) com.zhtm.entity包         根据表结构,创建实体类
    6) com.zhtm.dao包          先创建接口,后定义实现类
        注意,写1个方法,测试1个方法。
    7) com.zhtm.service包        先创建接口,后定义实现类
        注意,写1个方法,测试1个方法。
    8) com.zhtm.view包        创建显示显示面类
    9) 测试整个项目

时间: 2025-01-21 21:49:04

JDBC学习笔记(4)的相关文章

JDBC学习笔记(一)

public static void main(String[] args) { ResultSet rs = null; Statement stmt = null; Connection conn = null; try { /** * 1.加载JDBC驱动程序: * 加载目标数据库驱动到JVM * 成功加载后,会将Driver类的实例注册到DriverManager类 * oracle-Driver:oracle.jdbc.driver.OracleDriver * MySQL-Drive

JDBC学习笔记二

Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方法来获取 * 2).通过excuteUpdate(sql)可以执行S

【转】JDBC学习笔记(2)——Statement和ResultSet

转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement对象,用于执行不带参数的简单SQL语句. 通过JDBC向指定的数据表中插入一条记录,需要注意下面的几点: * 1.Statement:用于执行SQL语句的对象 * 1).通过COnnection的createStatement()方

JDBC学习笔记一

JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程序到JDBC管理器连接. JDBC Driver API: 这支持J

【转】JDBC学习笔记(1)——JDBC概述

转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创建SQL或MySQL语句 在数据库中执行SQL或MySQL查询 查看和修改记录 JDBC架构   JDBC API支持两层和三层的处理模式对数据库的访问,但一般JDBC体系结构由两层组成: JDBC API: 这提供了应用程

JDBC学习笔记及问题小结

JDBC => Java Database connectivity => 数据库连接 JDBC 就是由 java提供的一套访问数据库的统一api. 使用这套api , 我们在 切换库时 十分方便. 并且切换库不会改变代码.学习成本也降低了. 1.开发一个jdbc程序 1> 导包 ==> 导入厂商提供的数据库驱动. ==> mysql-connector-java-5.0.8-bin.jar 2> 注册驱动 3> 连接数据库 4> 操作数据库(执行sql)

JDBC学习笔记(7)——事务的隔离级别&amp;批量处理

数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段,

JDBC学习笔记(10)——调用函数&amp;存储过程

如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement *    对象的实例,在使用Connection对象的prepareCall() 方法时,需要传入一个String类型的字符串, *    该字符串用于指明如何调用存储过程 * 2.通过CallableStatement对象的registerOutParameter() 方法注册Out参数 * 3.通过CallableStateme

JDBC学习笔记(9)——DBUtils的使用

使用DBUtils提供的功能需要使用commons-dbutils-1.6.jar这个JAR包,在Apache官网可以下载到 使用DBUtils进行更新操 测试QueryRunner类的update方法 ,该方法可用于insert,update,delete操作具体代码实现 1 @Test 2 public void testQuertRunnerUpdate() { 3 // 1.创建QueryRunner的实现类 4 String sql = "delete from customers&q

JDBC学习笔记(三)大文本数据的读写

一.用JDBC向数据库插入大文本数据 String sql = "insert into my_clob values (null, ?)"; ps = conn.prepareStatement(sql); File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.sql"); Reader reader = new BufferedReader(new FileReader(f)); ps.setChara