JDBC 和数据库连接

2023-10-29

JDBC 和数据库连接

基本介绍

  1. JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。
  2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。
  3. JDBC的基本原理图[重要!]
    在这里插入图片描述

JDBC 带来的好处

如果Java直接访问数据库(示意图)
在这里插入图片描述

JDBC带来的好处(示意图)

在这里插入图片描述

说明:JDBC是Java提供一套用于数据库操作的接口API,Java程序员只需要

面向这套接口编程即可。不同的数据库厂商,需要针对这套接口,提供不同实现。

JDBC API

在这里插入图片描述

JDBC 程序编写步骤

  1. 注册驱动-加载Driver类
  2. 获取连接-得到Connection
  3. 执行增删改查-发送SQL给mysql执行4.释放资源-关闭相关连接

获取数据库连接 5 种方事

方式 1

在这里插入图片描述

方式 2

在这里插入图片描述

方式 3

在这里插入图片描述

方式 4

在这里插入图片描述

提示

在这里插入图片描述

方式 5

在这里插入图片描述

在这里插入图片描述

ResultSet[结果集]

  1. 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
  2. ResultSet对象保持一个光标指向其当前的数据行。最初,光标位于第一行之前
  3. next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false,因此可以在while循环中使用循环来遍历结果集

在这里插入图片描述

在这里插入图片描述

Statement

  1. Statement对象用于执行静态SQL语句并返回其生成的结果的对象

  2. 在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过

  3. Statement [存在SQL注入]

  4. PreparedStatement[预处理]

  5. CallableStatement[存储过程]

  6. Statement对象执行SQL语句,存在SQL注入风险

  7. SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,恶意攻击数据库。

  8. 要防范 SQL注入,只要用 PreparedStatement(从Statement扩展而来)取代Statement就可以了,

PreparedStatement

在这里插入图片描述

  1. PreparedStatement执行的SQL语句中的参数用问号(?)来表示,调用

PreparedStatement 对象的 setXxx()方法来设置这些参数. setXxx()方法有两个参数

第一个参数是要设置的SQL语句中的参数的索引(从1开始),

第二个是设置的SQL语句中的参数的值

  1. 调用 executeQuery(),返回 ResultSet 对象

  2. 调用executeUpdate():执行更新,包括增、删、修改

预处理好处

  1. 不再使用+拼接sql语句,减少语法错误
  2. 有效的解决了sql注入问题!
  3. 大大减少了编译次数,效率较高

JDBC 的相关 API 小结

在这里插入图片描述

事务

基本介绍

  1. JDBC程序中当一个Connection对象创建时,默认情况下是自动提交事务:每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚。
  2. JDBC程序中为了让多个SQL语句作为一个整体执行,需要使用事务
  3. 调用 Connection的 setAutoCommit(false)可以取消自动提交事务
  4. 在所有的SQL语句都成功执行后,调用Connection的commit();方法提交事务
  5. 在其中某个操作失败或出现异常时,调用Connection的 rollback();方法回滚事务

批处理

  1. 当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。
  2. JDBC的批量处理语句包括下面方法:
  • addBatch():添加需要批量处理的SQL语句或参数
  • executeBatch():执行批量处理语句;
  • clearBatch():清空批处理包的语句

JDBC连接MySQL时,如果要使用批处理功能,

请再url中加参数 rewriteBatchedStatements=true

批处理往往和PreparedStatement一起搭配使用,可以既减少编译次数,又减少运行次数,效率大大提高

传统获取 Connection 问题分析

  1. 传统的JDBC数据库连接使用 DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证IP地址,用户名和密码(0.05s~1s时间)。需要数据库连接的时候,就向数据库要求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易造成服务器崩溃。
  2. 每一次数据库连接,使用完后都得断开,如果程序出现异常而未能关闭,将导致数据库内存泄漏,最终将导致重启数据库。
  3. 传统获取连接的方式,不能控制创建的连接数量,如连接过多,也可能导致内存泄漏,MySQL崩溃。
  4. 解决传统开发中的数据库连接问题,可以采用数据库连接池技术(connection pool)

数据库连接池种类

JDBC的数据库连接池使用 javax.sql.DataSource来表示, DataSource只是一个接口,

该接口通常由第三方提供实现[提供.jar]

  1. C3P0 数据库连接池,速度相对较慢,稳定性不错(hibernate,spring)
  2. DBCP数据库连接池,速度相对c3p0较快,但不稳定
  3. Proxool数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点
  4. BoneCP数据库连接池,速度快
  5. Druid(德鲁伊)是阿里提供的数据库连接池,集DBCP、C3P0、Proxool

优点于一身的数据库连接池

Apache—DBUtils

1.关闭connection后,resultSet结果集无法使用

2.resultSet数据管理

3.示意图

在这里插入图片描述

基本介绍

commons-dbutils 是 Apache组织提供的一个开源JDBC工具类库,它是对JDBC的封装,使用dbutils能极大简化jdbc编码的工作量[真的]。

DbUtils

  1. QueryRunner类:该类封装了SQL的执行, 是线程安全的。可以实现增、删、改、查、批处理
  2. 使用QueryRunner类实现查询
  3. ResultSetHandler接口:

该接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式
在这里插入图片描述

表和 JavaBean 的类型映射关系

在这里插入图片描述

DAO 和增增删改查通用方法-BasicDao

在这里插入图片描述

基本说明

  1. DAO: data access object
  2. 这样的通用类,称为BasicDao,

是专门和数据库交互的,即完成对数据库(表)的crud操作。

在BaiscDao的基础上,实现一张表对应一个Dao,

更好的完成功能,比如Customer表Customer.java类(javabean)-CustomerDao.java

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC 和数据库连接 的相关文章

随机推荐

  • JAVA与RFID,技术改变世界

    Sun Java系统RFID软件已经发布 并做出了若干重要改进 与SAP Auto ID架构集成 与Java 综合应用平台套件 Java Composite Application Platform Suite 集成 支持JAVA平台 微版
  • linux解决Tomcat内存溢出

    Tomcat本身不能直接在计算机上运行 需要依赖于操作系统和一个JAVA 虚拟机 JAVA程序启动时JVM会分配一个初始内存和最大内存给程序 当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出 并且导致应用服务崩溃 一 常见的 Jav
  • nestjs知识系列:nest工程升级

    参考 Is there a recommended way to update NestJS Stack Overflow 实操 我从nestjs7升到9 实际上无法一键升级 可以略过 如果你不想更改全局 先npm install g ne
  • java/Springboot项目把Base64数据转为文件

    前言 以下记录如何将base64的数据转为文件保存在本地 依赖 pom xml需要导入以下依赖
  • worker 多线程

    Web Worker 的作用 就是为 JavaScript 创造多线程环境 允许主线程创建 Worker 线程 将一些任务分配给后者运行 在主线程运行的同时 Worker 线程在后台运行 两者互不干扰 等到 Worker 线程完成计算任务
  • mybatis学习(27):获取自增id方式一(在mapper中insert配置节点的属性)

    目录结构 com geyao mybatis mapper BlogMapper类 package com geyao mybatis mapper import java util List import java util Map im
  • TVM User Tutorial -- Blitz Course to TensorIR

    Author Siyuan Feng TensorIR 是一种特定领域语言 用于深度学习项目 有两个广泛的用途 在各种硬件后端上实现转换和优化程序 自动张力化程序优化的抽象 import tvm from tvm ir module imp
  • 一个可执行程序的组成

    一个可执行程序由四个区域组成 代码段 静态数据区 堆和栈 代码段包含程序运行时多执行的部分变量 静态数据区包含在程序生命周期内一直持久的数据 比如全局变量和静态局部变量 堆包含程序运行时动态分配的存储空间 比如用malloc分配的内存 栈包
  • mybatis使用时出现:对实体 “useSSL“ 的引用必须以 ‘;‘ 分隔符结尾问题的解决方法

    文章目录 问题描述 解决方法 问题描述 最近在学习mybatis 访问数据库时idea报错 解决方法 后来查了一下才发现 原来在 xml文件中写 符号时会引起冲突 需要把 改为 amp 才行 下面这个代码报错
  • 手把手带你打造自己的UI样式库(第三章)之常用样式组件的设计与开发

    常用样式组件的设计与开发 Search搜索框样式的设计与开发 搜索组件的需求 搜索框的功能比较简单 最基本的就是输入和提交两个逻辑 但是我们这个搜索框要额外的加一些细节 输入框分为输入状态和非输入状态 两种状态下输入框表现要有所不同 我们对
  • 虚拟机内部错误如何解决·?

    a 因为上一次开机是可以使用的 故初步推测是vm服务关闭所致 按住win R输入cmd打开cmd命令行 a 输入services msc进入服务界面 找到vm开头的服务 启动
  • 将本地的公钥复制到服务器的authorized_keys文件

    ssh git ip cat gt gt ssh authorized keys lt ssh id rsa pub
  • 1.4 ROS集成开发环境搭建

    ROS入门学习 1 4 ROS集成开发环境搭建 ROS入门教程 理论与实践 视频教程镇楼 和大多数开发环境一样 理论上 在 ROS 中 只需要记事本就可以编写基本的 ROS 程序 但是工欲善其事必先利其器 为了提高开发效率 可以先安装集成开
  • Android中OkHttp的使用(详解)

    1 先在项目中添加OkHttp库的依赖 dependencies compile com squareup okhttp3 okhttp 3 4 1 2 初始化 OkHttp框架的核心类是OkHttpClient 此类可直接实例化 由于Ok
  • 基于python,虹软sdk3.0实现的实时人脸识别

    前言 虹软sdk3 0是目前用过的最方便 效果最好的且免费的离线人脸识别SDK 提供的编程语音没有python 有大佬用c 代码接口转成python调用的 我在此基础上完善了一些功能 能够实现高精度多人脸实时人脸识别 并提供了年龄 性别识别
  • 用ChatGPT一分钟自动产出一份高质量PPT

    如何用ChatGPT一分钟自动产出一份高质量PPT 节约时间摸鱼呢 废话少说 直接上案例 一 用ChatGPT做一下提问 这里我用的小程序万事知天下 根据自己PPT的需求 制作chatgpt的prompt就行了 请帮我创建一个以 大学生如何
  • csv修改单元格格式后无法保存_Excel教程——excel如何使用条件格式?

    Microsoft excel条件格式可是你分析数据的好帮手 但该如何査看和分析这些数据呢 macw小编带来了excel如何使用条件格式的教程 希望对你有帮助 这款excel Mac版有一项常常被忽视 却非常实用的工具 条件格式 它能自动根
  • XMind思维导图介绍与下载安装使用教程

    文章目录 介绍 下载 安装 千人全栈VIP答疑群推荐 介绍 XMind 是一款非常实用的商业思维导图软件 应用Eclipse RCP 软件架构 打造易用 高效的可视化思维软件 强调软件的可扩展 跨平台 稳定性和性能 致力于帮助用户提高生产率
  • imos v5 web api说明文档_B站视频api整理

    此文档为非官方接口文档 无法保证接口有效性 以下接口为本项目目前使用的接口 也可以直接看src api 文件目录下的接口 仿B站视频网站项目源码 进入项目源码仓库 首页模块 推荐视频 https www bilibili com index
  • JDBC 和数据库连接

    JDBC 和数据库连接 基本介绍 JDBC为访问不同的数据库提供了统一的接口 为使用者屏蔽了细节问题 Java程序员使用JDBC 可以连接任何提供了JDBC驱动程序的数据库系统 从而完成对数据库的各种操作 JDBC的基本原理图 重要 JDB