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

【MySQL】Java的JDBC编程

目录

♫什么是JDBC

♫JDBC常用接口和类

♪Connection接口

♪Statement对象

♪ResultSet对象

♫JDBC的使用

♪添加“驱动包”

♪创建数据源,描述数据库服务器在哪

♪和数据库服务器建立连接

♪构建SQL语句

♪执行SQL语句

♪释放资源


♫什么是JDBC

我们前面操作数据库都是使用数据库自带的客户端通过网络访问数据库服务器,而要想通过代码来访问数据库服务器就需要自己实现一个数据库客户端(各种数据库都提供了一系列API可以使我们较为方便地实现一个客户端),而由于不同数据库提供的API不同,在Java领域就有大佬出来将这些API统一成一套:JDBC,每个数据库也都提供了能够适应JDBC的“驱动包”(API的具体实现)。JDBC这套API已经成为Java标准库的一部分,它屏蔽了不同数据库原生API之间的差异,使用一套API规范了不同数据库的编程操作。

♫JDBC常用接口和类

♪Connection接口

Connection 接口用于和数据库服务器建立连接,它的实现类由数据库提供,获取 Connection 对象通常有两种方式:
♩通过DriverManager(驱动管理类)的静态方法获取:
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
♩通过DataSource(数据源)对象获取:
        //1.创建数据源,描述数据库服务器在哪//创建实例DataSource dataSource = new MysqlDataSource();//设置数据库所在的位置((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");//设置数据库的用户名((MysqlDataSource)dataSource).setUser("root");//设置数据库的密码((MysqlDataSource)dataSource).setPassword("123456");//2.和数据库服务器建立连接//记录哪个和哪个要进行通信了Connection connection = dataSource.getConnection();

注:DriverManager类来获取的Connection连接,需要用到反射且是无法重复利用的;而DataSource提供连接池的支持,使用完会被线程池回收。

♪Statement对象

Statement 对象主要将 SQL语句发送到数据库中,每个Statement对象都通过Connection对象创建。Statement对象可以是普通的Statement(用于执行静态SQL语句)、PreparedStatement(是预编译的Statement对象,用于执行预编译的SQL语句)和CallableStatement(用于调用存储过程的Statement对象)。Statement对象中还有有两种执行SQL的方法:

♩executeQuery():执行后返回单个结果集,常用于select语句

♩executeUpdate():执行后返回受影响行数,常用于update、insert、delete语句

♪ResultSet对象

使用JDBC时,执行SQL查询会返回一个结果集。ResultSet是一个包含查询结果的表格,包括行和列。可以使用ResultSet接口检索和处理这些行和列,以便在Java应用程序中使用这些数据。

♫JDBC的使用

♪添加“驱动包”

要想使用JDBC需要到数据库的官网或者是“中央仓库”去下载对应数据库版本的“驱动包”,然后在idea项目下创建一个新目录,将“驱动包”拷贝到目录里,再右键选择Add as Library...键将“驱动包”作为库添加到当前项目中即可。

添加好“驱动包”后就可以开始JDBC编程了~

♪创建数据源,描述数据库服务器在哪

创建数据源可以使用DriverManger和DataSource两种,由于反射不属于常规编程手段,故这里采用DataSource的方法:

 //1.创建数据源,描述数据库服务器在哪//创建实例DataSource dataSource = new MysqlDataSource();//设置数据库所在的位置((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");//设置数据库的用户名((MysqlDataSource)dataSource).setUser("root");//设置数据库的密码((MysqlDataSource)dataSource).setPassword("1234");

注:MySQL数据连接的URL参数格式为: jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值

♪和数据库服务器建立连接

描述数据库服务器在哪后就可以和服务器建立连接了,通过dataSource的getConnection获取连接对象:

 //2.和数据库服务器建立连接//记录哪个和哪个要进行通信了Connection connection = dataSource.getConnection();

♪构建SQL语句

连接好服务器就可以构建要执行的SQL语句了,可以直接通过字符串常量构建SQL语句:

 //3.构造sql语句//描述sql是什么样子的String sql = "insert into student values(1,‘张三’)";//jdbc中还需要搭配一个特点的对象,来描述这里的sql的情况PreparedStatement statement = connection.prepareStatement(sql);

还可以通过输入的方式动态构建SQL语句:

 Scanner scanner = new Scanner(System.in);int id = scanner.nextInt();String name = scanner.next();//?为占位符,下标从1开始String sql = "insert into student values(?,?)";PreparedStatement statement = connection.prepareStatement(sql);//将id填充到第一个占位符statement.setInt(1,id);//将name填充到第二个占位符statement.setString(2,name);

注:一般不介意采用字符串拼接的方式构建SQL语句,不仅代码的可读性低,而且容易遭受SQL注入攻击

♪执行SQL语句

构建完SQL语句就可以让服务器执行对应的SQL语句了,增删改通过executeQuery()放回变更的行数,查询通过executeUpdate()放回查询的结果集:

♩增删改

 String sql = "insert into student values(1,‘张三’)";PreparedStatement statement = connection.prepareStatement(sql);//4.执行sql//给服务器发送网络请求int len = statement.executeUpdate();

♩查询

 String sql = "select * from student";PreparedStatement statement = connection.prepareStatement(sql);ResultSet resultSet = statement.executeQuery();//遍历结果集while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println(id + ":" + name);}

♪释放资源

操作完之后需要断开连接,释放资源:

        try {if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (SQLException e) {e.printStackTrace();throw new RuntimeException("数据库错误");}

相关文章:

【MySQL】Java的JDBC编程

目录 ♫什么是JDBC ♫JDBC常用接口和类 ♪Connection接口 ♪Statement对象 ♪ResultSet对象 ♫JDBC的使用 ♪添加“驱动包” ♪创建数据源,描述数据库服务器在哪 ♪和数据库服务器建立连接 ♪构建SQL语句 ♪执行SQL语句 ♪释放资源 ♫什么是JDBC 我们前面操…...

windows OpenCV(包含cuda)最简安装教程

windows OpenCV(包含cuda)最简安装教程 1. 在Windows下安装vcpkg vcpkg是一个开源的C包管理器,它能帮助我们轻松地安装和管理C库和工具。要在Windows上安装vcpkg,可以按照以下步骤进行: 克隆vcpkg仓库: 首…...

Vue3 + Nodejs 实战 ,文件上传项目--实现文件批量上传(显示实时上传进度)

目录 技术栈 1.后端接口实现 2.前端实现 2.1 实现静态结构 2.2 整合上传文件的数据 2.3 实现一键上传文件 2.4 取消上传 博客主页:専心_前端,javascript,mysql-CSDN博客 系列专栏:vue3nodejs 实战--文件上传 前端代码仓库:jiangjunjie…...

狂砸40亿美元,亚马逊向OpenAI竞争对手Anthropic投资

9 月 25 日下午,亚马逊在公司官网发布,向大模型公司 Anthropic 投资 40 亿美元, Anthropic以拥有对标 ChatGPT 的谈天机器人 Claude 而出名。 这项新的战略合作将结合双方在更安全的生成式AI领域的技术和专业知识,加速Anthropic未…...

目标检测YOLO实战应用案例100讲-基于YOLOv5_tiny算法的路面裂缝智能检测

目录 前言 国内外研究现状 公路路面裂缝检测方法现状 基于深度学习检测算法现状...

P5682 [CSP-J2019 江西] 次大值% 运算 set 去重的一道好题

#include <bits/stdc.h> using namespace std; int n, x, len, a[100010], ans; set<int> s; set<int>::iterator asd; int main() {/*a[n-1] 是最大的a[n-2] 可能是次大的a[n]%a[n-1]<a[n-1] 不可能是最大的&#xff0c;可能是次大的a[n-1]%a[n-2]<…...

vue3后台管理框架之API接口统一管理

在开发项目的时候,接口可能很多需要统一管理。在src目录下去创建api文件夹去统一管理项目的接口; 参数请参考mock中的模拟接口 //统一管理咱们项目用户相关的接口import request from @/utils/requestimport type { loginForm, loginResponseData, userInfoReponseData } fro…...

线性表的插入、删除和查询操作

线性表的插入、删除和查询操作 1、定义线性表 定义一个线性结构&#xff0c;有列表默认长度设置为50&#xff0c;列表数量 #include <stdio.h> #define MaxSize 50typedef int Element; typedef struct{Element data[MaxSize];int length; }SqList;2、顺序表插入 插入…...

基于深度学习网络的疲劳驾驶检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1疲劳检测理论概述 4.2 本课题说明 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 In_layer_Size [227 227 3]; img_size [224,…...

【文件系统】Linux文件系统的基本存储机制

Linux文件系统是Linux操作系统的重要组成部分&#xff0c;它负责管理计算机存储设备上的文件和目录。Linux文件系统采用类Unix的设计&#xff0c;具有强大的性能和可扩展性&#xff0c;支持多种文件系统类型&#xff0c;如ext4、XFS、Btrfs等。在项目存储架构的设计中&#xff…...

Outlook导入导出功能灰色,怎么解决

下载安装 Outlook 软件后&#xff0c;登陆账号&#xff0c;然后选择“文件” - “导出”&#xff0c;结果发现“导出”按钮是灰色的&#xff0c;根本无法导出。根据官方说法&#xff1a;由于配置没有完成或者office产品没有正确激活。outlook导出键为灰色原因由于配置没有完成或…...

Chrome 同站策略(SameSite)问题

问题产生 问题复现&#xff1a; A项目页面使用 iframe 引用了B项目 B项目登录页面输入账号密码后点击登录 无法跳转 尝试解决&#xff1a; 在B项目修改了跳转方式 但无论是 this.$router.push 还是 window.herf 都无法实现跳转在iframe中使用 sandbox 沙箱属性 同样无法实现跳…...

docker搭建nginx+php-fpm

docker run --name nginx -p 8898:80 -d nginx:1.20.2-alpine# 将容器nginx.conf文件复制到宿主机 docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf# 将容器conf.d文件夹下内容复制到宿主机 docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf…...

数据结构与算法---单调栈结构

数据结构与算法---单调栈结构 1 滑动窗口问题 1 滑动窗口问题 1 滑动窗口问题 由一个代表题目&#xff0c;引出一种结构 【题目】 有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边&#xff0c;窗口每次向右边滑一个位置。 例如&#xff0c;数组为[4,3,…...

Python爬虫:某书平台的Authorization参数js逆向

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...

Android MediaCodec 框架 基于codec2

系列文章的目的是什么&#xff1f; 粗略&#xff1a; 解码需要哪些基础的服务&#xff1f;标准解码的调用流程&#xff1f;各个流程的作用是什么&#xff1f;解码框架的层次&#xff1f;各个层次的作用&#xff1f; 细化&#xff1a; 解码参数的配置&#xff1f;解码输入数…...

【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…...

Go TLS服务端绑定证书的几种方式

随着互联网的发展&#xff0c;网站提供的服务类型和规模不断扩大&#xff0c;同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)[1]已然成为Web服务最重要的安全基础设施之一。默认情况下&#xff0c;一个TLS服务器通常只绑定一个证书[2]&#xff0c;但…...

【算法与数据结构】--高级算法和数据结构--排序和搜索

一、常见排序算法 以下是一些常见的排序算法&#xff0c;包括冒泡排序、选择排序、插入排序、快速排序和归并排序。每种排序算法的讲解以及附带C#和Java示例&#xff1a; 1.1 冒泡排序 (Bubble Sort) 讲解&#xff1a; 冒泡排序是一种简单的比较排序算法。它多次遍历待排序的…...

【Java】jvm 元空间、常量池(了解)

JDK1.8 以前的 HotSpot JVM 有方法区&#xff0c;也叫永久代&#xff08;permanent generation&#xff09;方法区用于存放已被虚拟机加载的类信息&#xff0c;常量、静态遍历&#xff0c;即编译器编译后的代码JDK1.7 开始了方法区的部分移除&#xff1a;符号引用&#xff08;S…...

Spring Boot自动加载

问&#xff1a;自动装配如何实现的&#xff1f; 答&#xff1a;简单来说就是自动去把第三方组件的Bean装载到IOC容器中&#xff0c;不需要开发人员再去写Bean相关的配置&#xff0c;在springboot应用里面只需要在启动类上去加上SpringBootApplication注解&#xff0c;就可以去实…...

MPNN 模型:GNN 传递规则的实现

首先&#xff0c;假如我们定义一个极简的传递规则 A是邻接矩阵&#xff0c;X是特征矩阵&#xff0c; 其物理意义就是 通过矩阵乘法操作&#xff0c;批量把图中的相邻节点汇聚到当前节点。 但是由于A的对角线都是 0.因此自身的节点特征会被过滤掉。 图神经网络的核心是 吸周围…...

Flink kafka 数据汇不指定分区器导致的问题

背景 在flink中&#xff0c;我们经常使用kafka作为flink的数据汇&#xff0c;也就是目标数据的存储地&#xff0c;然而当我们使用FlinkKafkaProducer作为数据汇连接器时&#xff0c;我们需要注意一些注意事项&#xff0c;本文就来记录一下 使用kafka数据汇连接器 首先我们看…...

【软考】14.1 面向对象基本概念/分析设计测试

《面向对象开发》 对象 现实生活中实际存在的一个实体&#xff1b;构成系统的一个基本单位由对象名、属性和方法组成 类 实体的形式化描述&#xff1b;对象是类的实例&#xff0c;类是对象的模板可分为&#xff1a;实体类&#xff1a;现实世界中真实的实体接口类&#xff08;边…...

MFC-对话框

目录 1、模态和非模态对话框&#xff1a; &#xff08;1&#xff09;、对话框的创建 &#xff08;2&#xff09;、更改默认的对话框名称 &#xff08;3&#xff09;、创建模态对话框 1&#xff09;、创建按钮跳转的界面 2&#xff09;、在跳转的窗口添加类 3&#xff0…...

Essential Steps in Natural Language Processing (NLP)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

Flink中KeyBy、分区、分组的正确理解

1.Flink中的KeyBy 在Flink中&#xff0c;KeyBy作为我们常用的一个聚合类型算子&#xff0c;它可以按照相同的Key对数据进行重新分区&#xff0c;分区之后分配到对应的子任务当中去。 源码解析 keyBy 得到的结果将不再是 DataStream&#xff0c;而是会将 DataStream 转换为 Key…...

QT6集成CEF3--01 准备工作

QT6集成CEF3--01 准备工作 一、所有使用到的工具软件清单:二、准备工作三、cefclient示例程序四、特别注意 一、所有使用到的工具软件清单: CEF 二进制发行包 cef_binary_117.2.5gda4c36achromium-117.0.5938.152_windows64.tar.bz2 CMake 编译工具 cmake-3.22.6-windows-x86_…...

随机误差理论与测量

文章目录 第1节 随机误差的性质和特点第2节 随机误差的数字特性标准差的估计 第3节 单次测量结果的精度指标第4节 多次测量结果的精度指标算数平均值的分布特性与标准差算数平均值的置信度算数平均值的精度指标&#xff08;常用的有4个) 第5节 非等精度测量 第1节 随机误差的性…...

树莓派4b配置通过smbus2使用LCD灯

出现报错&#xff1a; FileNotFoundError: [Errno 2] No such file or directory: ‘/dev/i2c-1’ 则说明没有打开I2C&#xff0c;可通过如下步骤进行设置 1、打开树莓派配置 sudo raspi-config2、进入Interface Options&#xff0c;配置I2C允许 目前很多python3版本已经不…...

网站禁止ip访问/百度收录查询方法

HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准。HTML 的上一个版本诞生于 1999 年。自从那以后&#xff0c;Web 世界已经经历了巨变。HTML5 仍处于完善之中。然而&#xff0c;大部分现代浏览器已经具备了某些 HTML5 支持。HTML5 是 W3C 与 WHATWG 合作的结果。WHATWG 致力于…...

网上接手袋做是哪一个网站/如何制作网址

php字符转json对象的方法发布时间&#xff1a;2020-07-08 10:36:42来源&#xff1a;亿速云阅读&#xff1a;76作者&#xff1a;Leah这期内容当中小编将会给大家带来有关php字符转json对象的方法&#xff0c;文章内容丰富且以专业的角度为大家分析和叙述&#xff0c;阅读完这篇文…...

购物网站开发公司/黑马培训机构可靠吗

转载于:https://www.cnblogs.com/joshuali/archive/2009/08/31/4339130.html...

汕头网站制作推荐/下载百度2024最新版

一、概率论基础 &#xff08;一&#xff09;概率与直观 &#xff08;二&#xff09;常见概率分布 &#xff08;三&#xff09;Sigmoid/Logistic函数的引入 二、统计量 &#xff08;一&#xff09;期望/方差/协方差/相关系数 &#xff08;二&#xff09;独立与不相关 三、大数定…...

网站设计中级/seopeix

/// // ServerDemo.cpp文件 #include <winsock2.h> // 为了使用Winsock API函数 #include <stdio.h> #include <windows.h> // 告诉连接器与WS2_32库连接 #pragma comment(lib,"WS2_32.lib") int main(int argc, char* argv[]) { // 初始…...

wordpress扫描附件到新浪图床/建站合肥网络公司seo

1 如何将字串 String 转换成整数 int?A. 有两个方法:1). int i Integer.parseInt([String]); 或i Integer.parseInt([String],[int radix]);2). int i Integer.valueOf(my_str).intValue();注: 字串转成 Double, Float, Long 的方法大同小异.2 如何将整数 int 转换成字串 S…...