JDBC快速入门操作

一、jdbc简介

 JDBC是java用于连接数据库的api,数据库软件有多种,像MySQL,SQLsever,Oracle等数据库,这些数据库都是由不同的团队开发的,所以相同的功能的api的名字不同,当一个后端工程需要切换一个数据库软件时,就需要改写后端的大量跟数据库相关的代码,非常麻烦,所以Java自己提供了一套JDBC来兼容所有的数据库操作,各个厂商也根据Java的JDBC的api提供了自家数据库的驱动包,这样就是的JDBC编写时,只需要下载对应数据库的驱动包,就能使用同一套api操作不同的数据软件。

二、引入数据库驱动包

有两种办法

  1. 直接下载
    • 在Maven仓库搜索Mysql
      在这里插入图片描述
    • 选择和数据库版本匹配的数据库驱动包
      在这里插入图片描述
    • 点击jar直接下载好驱动包
      在这里插入图片描述
    • 下载好之后在jdbc项目下面新建一个lib目录,将下载好的驱动包移动到目录下
      在这里插入图片描述
  2. 创建maven项目引入依赖(和之前的Maven项目引入依赖步骤一样创建maven项目引入依赖)

三、基本api介绍

  1. DataSourse接口
     这是一个描述一个数据库的接口,这个接口是java自带的,它实例化需要数据库驱动包提供的实现了这个接口的DataSource类,本文使用的MySQL驱动包,所以对应的类名叫做MySQLDataSource。
    在这里插入图片描述
     创建好这个DataSource之后要让这个DataSource和想要操作的数据库关联起来,所以给它赋值这个数据库的对应信息。这些信息就包括,数据库用户名(user),数据库密码(password),数据库的位置信息(url)。
    在这里插入图片描述
    用户名只要不去改,自动就是数据库生成的root,password就是每次运行数据库需要输入的密码,这两个是登录数据库的钥匙,url则描述了数据库到底是在网络上的那个位置。这个url和http中的url的结构是一样的。
    jdbc:mysql://127.0.0.1:3306/jdbc?characterEncoding=utf8&useSSL=false
    
    1. jdbc:mysql
      jdbc的版本,此时jdbc使用的是mysql驱动版。
    2. 127.0.0.1:3306
      因为是操作的本机的数据库,所以此时的ip地址是127.0.0.1,冒号后面的端口号是3306,MySQL数据库默认使用的就是3306端口。
    3. /jdbc
      数据库路径,选中的jdbc这个数据库,这个库要首先自己创建好。
      在这里插入图片描述
      4.?后面的就是一些配置信息
      characterEncoding=utf8表示字符集使用utf8字符集
      useSSL=false表示不使用加密传输
      两者之间用&隔开。
  2. Connection类
    Connection是连接类,它抽象出了连接池中的连接,在实例化了DataSource,明确了目标数据库的各种信息之后,jdbc就会创建连接池,连接池会进行多个连接,当需要使用连接时,就用getConnection方法取出一个连接。然后就可以使用取出的连接进行消息的传递了。
    在这里插入图片描述
  3. Statement接口
     Statement是用来处理sql语句的类,主要使用两个它的子类,PreparedStatement和Statement。
     其中PreparedStatement会对sql语句进行预处理,statement不会。
    因为sql语句是字符串,距离真正数据库能执行的命令还需要被解析,而服务器需要接收四面八方传来的sql语句,所以一般客户端在发送sql语句时,要先对sql语句进行解析,将解析后的命令发送给服务器,从而减轻服务器的负担。所以一般Statement不建议使用
    在这里插入图片描述
    实例化PreparedStatement时需要传入String类型的sql语句。
  4. executeUpdate和executeQuery方法
     executeUpdate是提交sql语句到服务器,并且返回一个int类型的数表示sql语句影响了几行。(适合delete,create,insert等)
     executeQuery是提交sql语句到服务器,并获取到服务器返回的结果,用resultSet类来接收。(适合select)
    在这里插入图片描述
  5. 参数化的sql语句
    可以用?来代替sql语句中的参数。
    在这里插入图片描述
    通过下标来选中第几个?(下标是从1开始的),并且用方法名setInt,setString来表示插入的参数的类型。
    构造好之后就可以用executeQuery或者executeUpdate来提交代码。
    可以多次设置不同的值,来实现不同的提交语句
  6. 资源回收(close)
    connection和statement都需要在不使用之后对其进行关闭,如果一个connection要多次发送不同sql语句,就要产生多个statement,每个statement都会占用一定资源,需要显示的关闭。
    connection在不使用之后也要显示的关闭,归还连接池中的连接。connection关闭之后与之关联的statement都会自动关闭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/70315.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频监控汇聚EasyCVR平台WebRTC流地址无法播放的原因排查

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…

RFID工业识别技术:供应链智能化的科技颠覆

RFID工业识别技术,作为物联网的先锋,正在供应链管理领域展现着前所未有的科技颠覆。从物料追踪到库存管理,再到物流配送,RFID技术以其高效的数据采集和智能的自动化处理,彻底改变着传统供应链的运营方式。 RFID在物料追…

每次执行@Test方法前都执行一次DB初始化(SpringBoot Test + JUnit5环境)

引言 在执行单元测试时,可以使用诸如H2内存数据库替代线上的Mysql数据库等,如此在执行单元测试时就能尽可能模拟真实环境的SQL执行,同时也无需依赖线上数据库,增加了测试用例执行环境的可移植性。而使用H2数据库时,通…

k8sday01

第一章 kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物…

微服务——RestClient查询文档

快速入门 返回结果直接把json风格的结果封装为SearchReponse对象返回 public class HotelSearchTest {private RestHighLevelClient client;Testvoid testMatchAll() throws IOException {//1.准备requestSearchRequest request new SearchRequest("hotel");//2.准…

C++ 网络编程项目fastDFS分布是文件系统(一)

目录 1.项目架构图 1. 项目架构图 1.1 一些概念 1.2 项目架构图 2. 分布式文件系统 2.1 传统文件系统 2.2 分布式文件系统 3. FastDFS 3.1 fastDFS介绍 3.2 fastDFS安装 3.3 fastDFS配置文件 3.4 fastDFS的启动 4. fastDFS状态检测 4.1 对file_id的解释 4. 2上传…

JMeter 查看 TPS 数据,详细指南

TPS 是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。在 JMeter 中,我们可以使用以下方法查看 T…

Explorable Tone Mapping Operators

Abstract 色调映射在高动态范围(HDR)成像中起着至关重要的作用。 它的目的是在有限动态范围的介质中保存HDR图像的视觉信息。 虽然许多工作已经提出从HDR图像中提供色调映射结果,但大多数只能以一种预先设计的方式进行色调映射。 然而,声调映射质量的主…

【数据结构功法】第八话 · 树与二叉树的基本概念

目录 🍺知识点9:树的概念与性质 🍯9.1 树的逻辑结构与性质 🍊1.树的逻辑结构 🍊2.树的相关术语 🍊3.树的性质 📜习题检测 🍯9.2 二叉树的的定义与性质 🍊1.二叉树…

js 面试题总结

js 面试题总结 文章目录 js 面试题总结近百道面试题1、实现 子元素 在父元素中垂直居中的方式2、实现 子元素 在父元素中水平 垂直居中的方式3、描述 Keepealive 的作用,有哪些钩子函数,如何控制组件级存列表?4、请写出判断对象是数组的三个方法5、请说…

RAM不够?CUBEIDE使用CCMRAM

RAM不够?使用CCMRAM 文章目录 RAM不够?使用CCMRAM打开连接LD文件:添加代码添加标识宏使用 打开连接LD文件: 添加代码 在SECTIONS段最后加上下面代码: _siccmram LOADADDR(.ccmram); /* CCM-RAM section * * IMPORTAN…

【雕爷学编程】Arduino动手做(13)---TTP223B电容式触摸按键模块之点动型篮板、AB款红板、AT款篮板与带背光板锁存款

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

快速获得图像中像素值的小工具

之前项目中为了做lka中获得rgb图像信息,网上大多方案是确定相关的区域然后输出像素值,这个方法太麻烦,做了一个简单的使用鼠标点击图片某区域,然后直接在终端输出该区域的像素值。下面是源码: import cv2 import matp…

VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR

文章目录 VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIORABSTRACT1 INTRODUCTION2 COMPRESSION WITH VARIATIONAL MODELS3 INTRODUCTION OF A SCALE HYPERPRIOR 个人总结动机流程思路 VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR ABSTRACT We describe …

UE中低延时播放RTSP监控视频解决方案

第1章 方案简介 1.1 行业痛点 在各种智慧城市、智慧社区、智慧水利、智慧矿山等数字孪生项目中,经常使用通UE来开发三维可视化场景。在这些场景中通常都需要把现场的各种监控视频在UE的可视化场景中接入,主要包含海康威视、大华、宇视、华为等众多监控…

分类过程中的一种遮挡现象

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,AB训练集各由6张二值化的图片组成,让A,B中各有3个点,且不重合,统计迭代次数并排序。 其中有10组数据 差值结构 迭代次数 构造平均列A 构造平均列AB…

React Native 样式布局基础知识

通过此篇笔记能够学习到如下的几个知识点 在 React Native 中使用样式的一些细节了解 React Native 的 Flex 布局概念了解 React Native 的 flex 布局属性React Native 如何添加多样式属性React Native 中绝对布局和相对布局 React Native 中的 Flex 布局概念 1、主轴和交叉…

蜜蜂路线 P2437

蜜蜂路线 题目背景 无 题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你&#xff1a;蜜蜂从蜂房 m 开始爬到蜂房 n&#xff0c;m<n&#xff0c;有多少种爬行路线&#xff1f;&#xff08;备注&#xff1a;题面有误&…

插入、希尔、归并、快速排序(java实现)

目录 插入排序 希尔排序 归并排序 快速排序 插入排序 排序原理&#xff1a; 1.把所有元素分为两组&#xff0c;第一组是有序已经排好的&#xff0c;第二组是乱序未排序。 2.将未排序一组的第一个元素作为插入元素&#xff0c;倒序与有序组比较。 3.在有序组中找到比插入…

Map中compute、putIfAbsent、computeIfAbsent、merge、computeIfPresent使用

目录 putIfAbsent computeIfAbsent computeIfPresent compute merge putIfAbsent 解释&#xff1a;【不存在则添加】&#xff0c;如果map中没有该key&#xff0c;则直接添加&#xff1b;如果map中已经存在该key&#xff0c;则value保持不变 default V putIfAbsent(K key,…