javaweb实训第四天上午——JDBC入门(4)

简介: 5.重构现在已经完成CRUD的功能,但是有些东西很不爽:   ① try -catch 关闭资源;   ② 驱动名称,url,username,password 每次都要写;–(万一数据库修改了)最好把这些东西抽取出来;

javaweb实训第四天上午——JDBC入门(3)https://developer.aliyun.com/article/1414844

5.重构

现在已经完成CRUD的功能,但是有些东西很不爽:

   ① try -catch 关闭资源;

   ② 驱动名称,url,username,password 每次都要写;–(万一数据库修改了)

最好把这些东西抽取出来;

  ③ class.forName 和 拿到连接都一样。 --抽取

   ④ 硬编码问题.

1 对于连接数据的一些参数,我们可以抽取(以后进行修改的时候方法,只需要改上面的参数就可以了)

20210602095208359.png

2 将参数抽取到一个单独的类里面(好处,其它类要使用只需修改这一份)

20210602095213955.png

3 每次操作都需要去注册驱动,得到连接

public class JDBCUtil {
  private  static String driverName = "com.mysql.jdbc.Driver";
  private  static String url = "jdbc:mysql://localhost:3306/mydb";
  private  static String userName = "root";
  private  static String password = "admin";
  private static JDBCUtil instance= null;
  Connection connection ;
  static{
try {
      //注册驱动
      Class.forName(driverName);
      instance = new JDBCUtil();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  private JDBCUtil(){}
  public static JDBCUtil getInstance(){
    return instance;
  }
  /**
   * 拿到连接对象
   * @return
   */
  public Connection getConn(){
    try {
      return DriverManager.getConnection(url, userName, password);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return null;
  }
}

4 每次都要关闭资源(这代码没技术含量) JDBCUtil中添加关闭资源的方法

20210602095235315.png


5 参数是硬编码在代码中(我们要把它放到资源文件中去)

/**
 * 操作数据库的工具类
 * @author Administrator
 *
 */
public class JDBCUtil {
  private static JDBCUtil instance= null;
  //用作读取资源文件
  private static Properties prop = null;
  static{
    try {
      prop = new Properties();
      //去加载资源文件
      prop.load(Thread.currentThread().getContextClassLoader()
          .getResourceAsStream("jdbc.properties"));
      //注册驱动
Class.forName(prop.getProperty("driverName"));
      instance = new JDBCUtil();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  private JDBCUtil(){}
  public static JDBCUtil getInstance(){
    return instance;
  }
  /**
   * 拿到连接对象
   * @return
   */
  public Connection getConn(){
    try {
      return  DriverManager.getConnection(prop.getProperty("url"),
            prop.getProperty("userName"), prop.getProperty("password"));
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return null;
  }
  /**
   * 用来关闭资源
   */
  public void close(ResultSet rs,Statement st,Connection conn){
    try {
      if(rs!=null)rs.close();
    } catch (Exception e) {
      e.printStackTrace();
    }finally{
      try {
        if(st!=null)st.close();
      } catch (Exception e) {
        e.printStackTrace();
      }finally{
        try {
          if(conn!=null)conn.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
  }
}

6.课程总结

6.1重点

JDBC的理解(接口或者规范 自己没有实现,由各地数据库厂商实现)

熟练的使用JDBC完成数据库的CRUD贾琏欲执事

理解DAO层,能够熟练把代码抽成DAO层

先创建一个domain包 ,在包里面创建相应的实体类

这个包: cn.itsource.domain

这里面写域对象(Student)

在domain包的同一级,建一个dao包,这个包里面写接口:

cn.itsource.dao

接口名称: IXxxDAO / IXxxDao

在dao这个包里面再建一个包: impl 包 cn.itsource.dao.impl

这个包里面实现dao包里面的接口,这个impl包在dao包里面一层

这个包类的名称:XxxDAOImpl/XxxDaoImpl

6.2难点

1.基本没有多大的难点;回去了的时候多去敲代码实现

6.3如何掌握

1.多去敲上课老师的代码

把练习题做完

6.4 排错技巧

1.通过错误提示排除问题

2.把自己报错的信息在百度上面进行搜索

7.课后练习

1.第一题: 创建一个数据库(名称为jdbcwork)

要求:在数据库中创建一张表student(如下):


id bigint

username varchar 用户名

password varchar 密码

age int 年龄

sex boolean(bit) 性别

intro varchar 简介


2.第二题:在程序中完成对上面的数据库的CRUD

要求:实现dao层,将配置抽取出来(db.properties)

每一步实现都要有相应的注释


作业做完后注意

每一步操作一定要非常清楚,包括对于dao层的抽取,希望大家下来多理解,如果Dao暂时更理解不了的话,这部分一定要多写几次,在真实开发过程中我们对数据库的操作都会抽出一个dao层。

一定要把今天上课老师写的代码都自己多写写

8.面试题

9.扩展知识或课外阅读推荐


目录
相关文章
|
17天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
142 60
【Java并发】【线程池】带你从0-1入门线程池
|
4天前
|
缓存 安全 Java
【Java并发】【synchronized】适合初学者体质入门的synchronized
欢迎来到我的Java线程同步入门指南!我不是外包员工,梦想是写高端CRUD。2025年我正在沉淀中,博客更新速度加快,欢迎点赞、收藏、关注。 本文介绍Java中的`synchronized`关键字,适合初学者。`synchronized`用于确保多个线程访问共享资源时不会发生冲突,避免竞态条件、保证内存可见性、防止原子性破坏及协调多线程有序访问。
45 8
【Java并发】【synchronized】适合初学者体质入门的synchronized
|
3天前
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
4天前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
54 23
|
3天前
|
SQL druid Oracle
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
|
2月前
|
自然语言处理 Java
Java中的字符集编码入门-增补字符(转载)
本文探讨Java对Unicode的支持及其发展历程。文章详细解析了Unicode字符集的结构,包括基本多语言面(BMP)和增补字符的表示方法,以及UTF-16编码中surrogate pair的使用。同时介绍了代码点和代码单元的概念,并解释了UTF-8的编码规则及其兼容性。
118 60
|
2月前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
193 7
|
2月前
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
54 5
|
3月前
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
469 31
|
3月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
121 7
Spring Boot 入门:简化 Java Web 开发的强大工具

热门文章

最新文章