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

JDBC编程复习

文章目录

  • JDBC
    • 1.概念
    • 2.原理
    • 3. 如何使用JDBC编程
      • 1. 下载mysql的jdbc驱动
      • 2. 项目中引入驱动
    • 4. JDBC使用
      • 1. 和数据库建立连接
      • 2.获取连接
      • 3. Statement对象
      • 4. 释放资源


JDBC

1.概念

JDBC,即Java Database Connectivity,java数据库连接。是Java提供的API用来执行SQL语句,它是Java中的数据库连接规范,这个API由java.sql.*,javax.sql.*包中的一些类和接口构成,它为Java开发人员操作数据库提供了一个标准的API,提供了多种关系的数据空提供访问。

2.原理

JDBC为多种关系数据库提供了统一访问方式,数据库的种类有很多,每个数据库提供的接口都各不同,Java就能够使用一套代码就能操作各种不同种类的数据库。

Java开发者只需呀关注怎么使用就可以了,JDBC的API是Java标准库里提供好的类,驱动程序往往是一个jar包,访问的是数据库服务器。

在这里插入图片描述

3. 如何使用JDBC编程

1. 下载mysql的jdbc驱动

  • MySQL官网下载
  • 从MySQL的githup下载
  • Maven中央仓库下载

在这里插入图片描述

需要注意的是,如果MySQL的服务器是5.7话,那么驱动包也得是5系列的,8就用8系列的驱动包.

下载后的jar包里其实就是包含了很多.class文件,安装特定的目录结构组织,能够被Java识别.

2. 项目中引入驱动

  1. 创建一个目录
  2. 把jar包拷贝进来
  3. 由键这个目录,add as libray
  4. 然后确定即可

在这里插入图片描述

4. JDBC使用

1. 和数据库建立连接

这个URL是和数据库建立连接时必备的它的基本格式为

String URL = "jdbc:mysql://127.0.0.1:3306/system_book?characterEncoding=utf8&useSSL=false";
  • jdbc:mysql:协议名,对于JDBC来说是固定的
  • 127.0.0.1:数据库服务器ip(这里表示本机Ip)
  • 3306:MySQL默认端口号
  • system_book:数据库名
  • characterEncoding=utf8:当前成员以utf8字符集解析数据
  • useSSL=false:传输是否加密

创建连接代码

private static final String URL = "jdbc:mysql://127.0.0.1:3306/system_book?characterEncoding=utf8&useSSL=false";private static final String USER = "root";private static final String PASSWORD = "root";private static DataSource dataSource = new MysqlDataSource();static {((MysqlDataSource)dataSource).setURL(URL);((MysqlDataSource)dataSource).setUser(USER);((MysqlDataSource)dataSource).setPassword(PASSWORD);}
  • USER:数据库用户名

  • PASSWORD:数据库密码

  • DataSource:是JDBC提供的一个接口

  • MysqlDataSource:是一个类,实现了DataSource接口,用于MySQL操作数据库

  • 这里的setURLsetUsersetPassword都是MysqlDataSource的方法

  • 为啥上述方法不是DataSource接口的?原因就是并不是所有数据都能设置者几个东西

  • 这里的代码为啥要先向上转型再向下转型呢?其实可以写成这样

    MysqlDataSource mysqlDataSource = new MysqlDataSource();mysqlDataSource.setURL(URL);mysqlDataSource.setUser(USER);mysqlDataSource.setPassword(PASSWORD);
    
  • 使用DataSource的好处就是,我们持有的是DataSource示例,它可以接受实现了它的其它类,假设如果后续要更换数据库,只需要修改这几行代码即可。如果使用MysqlDataSource就要修改大量代码

2.获取连接

DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL(URL);((MysqlDataSource)dataSource).setUser(USER);((MysqlDataSource)dataSource).setPassword(PASSWORD);
Connection connection = dataSource.getConnection();

在这里插入图片描述

还有一种获取连接的方式,通过DriverManager(驱动管理类)的静态方法获取

Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(URL);

以上两种方式的区别是:

  • DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源
    时,通过connection.close()都是关闭物理连接
  • DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接
    是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将
    Conncetion连接对象回收

3. Statement对象

Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象

  1. PreparedStatement
    • 用于执行带或不带参数的SQL语句
    • SQL语句会预编译再数据库系统
    • 执行速度快于Statement对象
  2. Statement
    • 用于执行不带参数的简单SQL语句
  3. CallableStatement
    • 用于执行数据库存储过程的调用

当然PreparedStatement是最常用的,主要有executeQuery() 方法和executeUpdate()方法

  • executeQuery() 方法执行后返回单个结果集的,通常用于select语句
  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete
    语句

带有参数的SQL执行

public boolean add(Book book) {Connection connection = null;PreparedStatement statement = null;try {// 和数据库建立连接connection = DBUtil.getConnection();// 拼装sqlString sql =  "insert into book values (null,?,?,?,?,?)";statement = connection.prepareStatement(sql);statement.setString(1,book.getName());statement.setString(2,book.getAuthor());statement.setString(3,book.getType());statement.setBigDecimal(4,book.getPrice());statement.setString(5,"未借出");// 执行sqlint ret = statement.executeUpdate();if (ret > 0) {return true;}} catch (SQLException throwables) {throwables.printStackTrace();} finally {DBUtil.close(connection,statement,null);}return false;}

不带参数的SQL执行

ResultSet对象:ResultSet是一个结果集 ,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供
了对这些行中数据的访问 ,我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环 。

public List<Book> getAll() {Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;List<Book> bookList = new ArrayList<>();try {// 和数据库建立连接connection = DBUtil.getConnection();// 拼装sqlString sql = "select * from book";statement = connection.prepareStatement(sql);// 执行sqlresultSet = statement.executeQuery();while (resultSet.next()) {String bookName = resultSet.getString("name");String auth = resultSet.getString("author");String type =  resultSet.getString("type");BigDecimal price = resultSet.getBigDecimal("price");String status = resultSet.getString("status");Book book = new Book(bookName,auth,type,price);book.setLoanOut(("未借出".equals(status) ? false : true));bookList.add(book);}} catch (SQLException throwables) {throwables.printStackTrace();} finally {DBUtil.close(connection,statement,resultSet);}return bookList;}

4. 释放资源

建立连接后,使用完毕后一定要记得释放这个连接,如果不一直不释放可能就会造成资源泄露的情况。

注意释放的顺序一定是先创建的后释放。

try {// 先创建的额后释放if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (SQLException throwables) {throwables.printStackTrace();}

相关文章:

JDBC编程复习

文章目录JDBC1.概念2.原理3. 如何使用JDBC编程1. 下载mysql的jdbc驱动2. 项目中引入驱动4. JDBC使用1. 和数据库建立连接2.获取连接3. Statement对象4. 释放资源JDBC 1.概念 JDBC,即Java Database Connectivity&#xff0c;java数据库连接。是Java提供的API用来执行SQL语句&a…...

c++基础入门二

一、数组的引用int main() {int a 10, b 20;int ar[10] { 1,2,3,4,6,7 };int& x ar[0];int& p[5] ar;//errorint(&p)[10] ar;//引用整个数组的大小sizeof(ar)int(*p)[10] &ar;//typesize表示整个数组//只有在这三种情况下代表整个数组&#xff0c;其他情…...

企业数字化转型的产品设计思路

数字化转型的核心是全面重塑企业的管理模式和经营模式&#xff0c;是迈向数字经济时代的方式。一、到底什么是数字化转型&#xff1f;数字化转型并不神秘。数字化转型是一种经营方式、一种经营理念&#xff0c;是将企业相关的人、物料、设备、资金等要素进行系统运转&#xff0…...

Linux日志分析常用命令

一&#xff1a;常用命令1、tail参数&#xff1a; tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ] 参数说明&#xff1a; -f 该参数用于监视File文件增长。 -c Number 从 Number 字节位置读取指定文件 -n Number 从 Number 行位置读取指…...

Allegro如何使用Snake命令走蛇形线操作指导

Allegro如何使用Snake命令走蛇形线操作指导 在做PCB设计的时候,遇到不规则BGA的时候,蛇形走线是惯用的走线方式,类似下图 Allegro支持蛇形走线,具体操作如下 首先把过孔打好,尽量上下左右间距一致,不容易出现偏差,如下图在Command命令栏下方输入snake,然后回车...

在 Eclipse 中创建 Maven 项目

1.在 Eclipse 中配置 MavenEclipse 中默认自带 Maven 插件&#xff0c;但是自带的 Maven 插件不能修改本地仓库&#xff0c;所以通常我们不使用自带的 Maven &#xff0c;而是使用自己安装的&#xff0c;在 Eclipse 中配置 Maven 的步骤如下&#xff1a; 1) 点击 Eclipse 中的 …...

flex 布局相关属性的使用

简单概述 为元素添加 display:flex; 的属性后&#xff0c;当前元素被视为弹性布局的盒子容器(box)&#xff0c;其子元素被视为弹性布局项目(item)。item 会在 box 内灵活布局&#xff0c;解决了对齐、分布、尺寸等响应式问题。 演示 demo <template><div class&quo…...

【C++】类和对象(第一篇)

文章目录1. 面向过程和面向对象初步认识2.类的引入3.类的定义3.1 类的两种定义方式3.2 成员变量命名规则建议4. 类的访问限定符及封装4.1 访问限定符4.2 封装5. 类的作用域6. 类的实例化7. 类对象模型7.1 类对象大小的计算7.2 类对象的存储方式猜测7.3 结构体内存对齐规则复习8…...

springboot 接入websocket实现定时推送消息到客户端

目录说明代码实现说明 如标题&#xff0c;举例需求场景&#xff1a; 前端与后端websocket连接上后&#xff0c;多用户登录&#xff0c;后端根据不同用户定时发消息给前端用于展示 代码实现 1、 <dependency><groupId>org.springframework.boot</groupId>…...

虚拟机磁盘重新分区增加Docker磁盘空间

目录一、简介二、重新分区 挂载目录2.1 增加虚拟机硬盘空间2.2 重新分区2.3 格式化新分区2.4 挂载docker目录三、重新拉取一、简介 今天在使用docker pull 拉取镜像时&#xff0c;报了no such file or directory的信息&#xff0c;原来是Docker的磁盘空间满了 #查看Docker Roo…...

Java开发学习(四十八)----MyBatisPlus删除语句之逻辑删除

1、逻辑删除 接下来要讲解是删除中比较重要的一个操作&#xff0c;逻辑删除&#xff0c;先来分析下问题: 这是一个员工和其所签的合同表&#xff0c;关系是一个员工可以签多个合同&#xff0c;是一个一(员工)对多(合同)的表 员工ID为1的张业绩&#xff0c;总共签了三个合同&a…...

RabbitMq

一、四大核心概念生产者&#xff1a;产生数据发送消息的程序是生产者交换机&#xff1a;交换机是RabbitMQ非常重要的一个部件&#xff0c;一方面它接收来自生产者的消息&#xff0c;另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息&#xff0c;是将这…...

Qt学习笔记

文章目录一、C指针函数驼峰命名法、下划线命名法编程报错二、C三、Qt语法Qt历史、Qt应用Qt特色快捷键Qt类的族谱QWidgetQPushButtonQDebug对象树Qt窗口坐标信号和槽Qt自带的信号的槽自定义的信号和槽Qt4版本 vs Qt5版本 的connect写法函数指针解决重载问题拓展类型转换QString …...

洛谷——P1091 合唱队形

【题目描述】 n 位同学站成一排&#xff0c;音乐老师要请其中的 n−k 位同学出列&#xff0c;使得剩下的 k 位同学排成合唱队形。 合唱队形是指这样的一种队形&#xff1a;设 kk 位同学从左到右依次编号为 1,2, … ,k&#xff0c;他们的身高分别为​,​, … ,​&#xff0c;则…...

使用logstash把mysql同步到es,Kibana可视化查看

1&#xff1a;首先需要电脑本地有es环境&#xff0c;并且要牢记版本后&#xff0c;后续安装的logstash和Kibana一定要版本对应 查看es版本&#xff1a;http://localhost:9200/ 2&#xff1a;安装对应版本的logstash&#xff1a;找到自己对应ES版本&#xff0c;然后解压 Logst…...

Vue3.0 setup的使用及作用

目录开篇&#xff1a;1.什么是setup2.setup怎么使用3.setup中包含的生命周期函数3.setup相关参数4.setup特性总结总结开篇&#xff1a; 从vue2升级 vue3&#xff0c;vue3是可以兼容vue2。所以v3可以采用v2的选项式api&#xff0c;但是v2不能使用v3的组合式api&#xff0c;由于…...

Ubuntu18.04安装Vertica

目录下载安装包安装(Ubuntu18.04)配置 I/O Scheduler配置 TZSupport Tools配置 swapinessDisk ReadaheadEnabling chrony or ntpd自启动项错误处理后重装下载安装包 官网11.0版本或者10.0(deb)安装包可私信提供百度网盘链接&#xff1b; 安装(Ubuntu18.04) testvertica:~$ s…...

2.计算机基础-计算机网络面试题—基础知识、容器、面向对象、并发编程

本文目录如下&#xff1a;计算机基础-计算机网络 面试题一、基础知识简述 TCP 和 UDP 的区别&#xff1f;http与https的区别?Session 和 Cookie 有什么区别&#xff1f;URL是什么&#xff1f;由哪些部分组成&#xff1f;OSI 的 五层模型 都有哪些&#xff1f;get 和 post 请求…...

解决Mac 安装应用提示:xx已损坏,无法打开。 您应该将它移到废纸篓问题

许多新手mac 用户安装应用得时候会出现 “已损坏&#xff0c;无法打开。您应该将它移到废纸娄” 导致无法正常安装&#xff0c;其实应用软件b并没有损坏&#xff0c;只是系统安全设置&#xff0c;我们改如何解决呢&#xff1f; 1、开启允许任何来源 苹果已经取消了允许“任何…...

xpath注入[NPUCTF2020]ezlogin

[NPUCTF2020]ezlogin 打开界面 如果发现自己输入的信息由这样构成&#xff0c;可以往xpath注入上靠一下。 不管输入什么&#xff0c;很容易发现登陆就超时了&#xff0c;说明这里token是不断刷新的。 这样构造也是一样的目的都是为了闭合后面的&#xff0c;为啥有两个or呢 us…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...

如何通过git命令查看项目连接的仓库地址?

要通过 Git 命令查看项目连接的仓库地址&#xff0c;您可以使用以下几种方法&#xff1a; 1. 查看所有远程仓库地址 使用 git remote -v 命令&#xff0c;它会显示项目中配置的所有远程仓库及其对应的 URL&#xff1a; git remote -v输出示例&#xff1a; origin https://…...