当前位置: 首页 > news >正文

JavaWeb--使用JDBC操作数据库(一)

JavaWeb–使用JDBC操作数据库

文章目录

  • JavaWeb--使用JDBC操作数据库
    • 1.JDBC简介
    • 2.JDBC访问数据库步骤
    • 3.JDBC封装
      • 3.1为什么进行JDBC封装
        • 3.1.1 封装的目的
        • 3.1.2 封装的好处
      • 3.2实现JDBC封装
      • 3.3DAO层
        • 3.3.1什么是DAO层
        • 3.3.2DAO模式的组成
      • 3.4属性文件
      • 3.5单例模式
        • 3.5.1为何需要单例模式
        • 3.5.2单例模式概念
        • 3.5.3单例模式分类

1.JDBC简介

  • JDBC(Java DataBase Connectivity):Java数据库连接技术
  • 作用:实现Java程序对各种数据库的访问
  • 组成:由一组使用Java语言编写的类和接口(JDBC API)组成,位于java.sql以及javax.sql包中

在这里插入图片描述

2.JDBC访问数据库步骤

在这里插入图片描述

package demo;import java.sql.*;public class Demo1_query {public static void main(String[] args) {// 1.加载JDBC驱动try {Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8";String uname = "root";String upwd = "root";//2. DriverManager创建数据库连接Connection connection = DriverManager.getConnection(url, uname, upwd);//3.创建SQL语句String sql = "select " +"id," +"proCode," +"proName," +"proDesc " +"from smbms_provider";//4.通过Connection创建PreparedStatement对象用于执行SQL语句PreparedStatement statement = connection.prepareStatement(sql);//执行SQL语句 返回resultSet集合ResultSet resultSet = statement.executeQuery();while (resultSet.next()) {Long id = resultSet.getLong("id");String proCode = resultSet.getString("proCode");String proName = resultSet.getString("proName");String proDesc = resultSet.getString("proDesc");System.out.println(id + "\t" + proCode + "\t" + proName + "\t" + proDesc);}//5.关闭数据库连接connection.close();  } catch (Exception e) {e.printStackTrace();}}
}

3.JDBC封装

3.1为什么进行JDBC封装

3.1.1 封装的目的
  • 减少代码冗余:将相似功能的代码抽取封装成方法
  • 降低耦合度:通过接口抽象数据库操作,便于更换数据库
  • 提高可维护性:统一管理数据库连接和操作
  • 增强安全性:防止SQL注入攻击
3.1.2 封装的好处
  • 代码复用性提高
  • 系统扩展性增强
  • 错误处理统一
  • 资源管理规范

3.2实现JDBC封装

  • 将所有增删改查操作抽取成接口
  • 定义实体类传输数据
  • 将通用的操作(打开、关闭连接等)封装到工具类
  • 数据库工具类BaseDao:增、删、改、查的通用方法

3.3DAO层

3.3.1什么是DAO层
  • DataAccessObject(数据存取对象)
  • 位于业务逻辑和持久化数据之间
  • 实现对持久化数据的访问
3.3.2DAO模式的组成
  • DAO接口:定义数据操作的方法
  • DAO实现类:实现接口中的方法
  • 实体类:数据传输对象
  • 数据库连接工具类:管理数据库连接和资源

3.4属性文件

  • 后缀为.properties

  • 数据格式为“键=值"

  • 使用“#"来注释

    mysql.driver=com.mysql.cj.jdbc.Driver
    mysql.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
    mysql.rootname=root
    mysql.rootpwd=root
    

3.5单例模式

3.5.1为何需要单例模式
  • BaseDao:操作数据库的基类
  • 每个线程对系统操作都需new一个BaseDao实例
  • 初始化时的I/0操作消耗系统资源,影响系统性能
3.5.2单例模式概念
  • 系统运行期间,有且仅有一个实例
  • 一个类只有一个实例最基本的要求
    • 只提供私有构造器
  • 必须自行创建这个实例
    • 定义了静态的该类私有对象
  • 必须自行向整个系统提供这个实例
    • 提供一个静态的公有方法,近返回创建或者获取本身的静态 私有对象
3.5.3单例模式分类
  • 懒汉模式
    • 在类加载时不创建实例,采用延迟加载的方式,在运 行调用时创建实例
    • 特点
      • 线程不安全
      • 延迟加载
    • 如何解决线程安全问题
      • 同步(synchronized)
  • 饿汉模式
    • 在类加载的时候,就完成初始化
    • 特点
      • 线程安全
      • 不具备延迟加载特性
http://www.dtcms.com/a/486027.html

相关文章:

  • 【Web开发】待办事项列表
  • Linux IIO研究(二)
  • 浙江建设厅网站那三类人员爱给网官网免费素材
  • Spring Boot整合Apache Shiro权限认证框架(实战篇)
  • Rust 错误处理
  • 【在 Windows 上运行 Apache Hadoop 或 Spark/GeoTrellis 涉及 HDFS 】
  • Linux操作系统-命令行参数及环境变量
  • 系统架构设计师备考第40天——软件可靠性基础
  • RAG 问题处理系统架构解析:企业级智能问答QuestionsProcessor.py的工程实现
  • LlamaIndex多模态RAG开发实现详解
  • springboot实现微信小程序支付(服务商和普通商户模式)
  • 石景山网站建设好的公司有特色的企业网站
  • 个人建网站怎么赚钱网站一般用什么数据库
  • 【机器学习03】学习率与特征工程、多项式回归、逻辑回归
  • PyTorch解析使用张量与动态计算图实现深度学习模型的高效训练
  • 大二java学习笔记:二维数组
  • 缓存行Cache Line
  • 10-机器学习与大模型开发数学教程-第1章 1-2 O(n) 表示法与时间复杂度
  • toLua[六] Examples 05_LuaCoroutine分析
  • keil5使用STlink下载程序到stm32后不自动运行的解决办法
  • stm32大项目阶段20251015
  • 机器学习四范式(有监督、无监督、强化学习、半监督学习)
  • 源码分析 golang bigcache 高性能无 GC 开销的缓存设计实现
  • 网站开发的工资开发者应用
  • 东莞网站建设优化企业太平洋保险网站
  • transformer-注意力评分函数
  • 破解 Shuffle 阻塞:Spark RDD 宽窄依赖在实时特征工程中的实战与未来
  • TypeScript入门学习
  • 西固网站建设平台12306网站花多少钱做的
  • Linux运维实战:云原生设计与实施DockerK8S(视频教程)