【MySQL】JDBC编程

在这里插入图片描述

  • 👑专栏内容:MySQL
  • ⛪个人主页:子夜的星的主页
  • 💕座右铭:前路未远,步履不停

目录

  • 一、JDBC工作原理
  • 二、JDBC 使用
    • 1、准备工作
    • 2、使用实例
    • 3、手动输入


一、JDBC工作原理

JDBC是Java语言中用于与数据库进行交互的一组API(应用程序接口)。JDBC允许Java应用程序通过标准的SQL语句访问数据库,并处理查询、更新和管理数据库中的数据。JDBC提供了一种统一的方式,使Java应用程序能够与各种不同类型的数据库进行通信,而不需要针对每个数据库系统编写特定的代码。

它是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。这个API由 java.sql.*javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
image.png
JDBC访问数据库层次结构:
image.png

二、JDBC 使用

1、准备工作

可以在中央仓库下载数据库驱动包:https://mvnrepository.com/
下载数据库驱动包,并添加到项目的依赖中: 在项目中创建文件夹lib,并将依赖包mysql-connector-java-5.1.47.jar复制到lib中。
image.png
再配置该jar包到本项目的依赖中:右键点击项目添加为库,将该lib文件夹配置进依赖中,表示该文件夹下的jar包都引入作为依赖。
image.png

2、使用实例

public class demo1 {public static void main(String[] args) throws SQLException {//1.创建一个数据源DataSource dataSource = new MysqlDataSource();//2.设置数据源的属性,为连接数据库做准备((MysqlDataSource)dataSource).setURL("jdbc:mysql://localhost:3306/java108?user=root&password=11111&useUnicode=true&characterEncoding=UTF-8");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("11111");//3.和数据库建立连接Connection connection = dataSource.getConnection();//4.拼装sql语句String sql = "insert into student values(1,'张三')";PreparedStatement statement = connection.prepareStatement(sql);//5.执行sql语句,返回值是这次操作影响了几行int ret = statement.executeUpdate();System.out.println("影响了"+ret+"行");//6.关闭释放资源statement.close();connection.close();}
}
  1. 创建一个数据源
DataSource dataSource = new MysqlDataSource();

这里面 DataSource是 JDBC 的 interface
MysqlDataSourceMySQL 驱动包中提供的类,这个类就实现了 DataSource interface。同时,这个代码也是一个非常常见的向上转型操作。

  1. 设置数据源的属性,为连接数据库做准备
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("11111");

向下转型又回来了,目的是为了使用 setUrl 方法,因为是这个方法是子类才有的。
为什么不直接 dataSource.setUrl();因为,按照转型的写法,可以让 MysqlDataSource这个类不要扩散到代码的其他部分,目的是降低MySQL 的驱动包和其他代码之间的耦合关系,避免后续更换数据库导致成本太高。
setURL为设置MySQL数据连接的URL参数格式: jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
setUsersetPassword分别为设置用户名和密码。

  1. 和数据库建立连接
Connection connection = dataSource.getConnection();
  1. 拼装 sql 语句
String sql = "insert into student values(1,'张三')";
PreparedStatement statement = connection.prepareStatement(sql);

SQL 语句本身是 String 类型的,但是 JDBC 提供了 Statement 对象,让我们把 String 转化为 Statement 再发给服务器执行。但是,我们一般使用 PreparedStatement来代替 Statement
Statement是把 SQL 原封不动的转发给数据库服务器,数据库服务器负责自己解析 SQL,而 PreparedStatement会先在客户端这边初步解析一下 SQL 语句。

  1. 执行sql语句,返回值是这次操作影响了几行
int ret = statement.executeUpdate();
System.out.println("影响了"+ret+"行");

executeUpdate() 方法通常用于执行更新数据库的操作,例如插入、更新或删除数据,这个操作的返回值是影响的行数。
executeQuery() 方法通常用于读取数据库的操作。这个方法返回一个 ResultSet 对象,其中包含查询结果的数据。
下面是一个查询操作的写法:

public class demo2 {//查询操作基本写法public static void main(String[] args) throws SQLException {DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setURL("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("11111");Connection connection = dataSource.getConnection();String sql = "select * from student";PreparedStatement statement = connection.prepareStatement(sql);//执行查询操作,要是有executeQuery,返回值是一个ResultSet类型的对象ResultSet resultSet = statement.executeQuery();//遍历结果集合while (resultSet.next()){int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("id:"+id+"   "+"name:"+name);}}
}
  1. 关闭释放资源
statement.close();
connection.close();

创建的语句对象和连接对象,都会持有一些计算机硬件/软件上的资源,这些资源不用了就应该及时释放。Java 虽然有垃圾回收机制,自动释放内存,但是计算机资源不仅仅是内存。这些其他资源也是需要手动释放的。
这里也需要注意一下关闭顺序,一般整体原则是:先创建的对象后关闭,后创建的先关闭

3、手动输入

上面的代码能执行 SQL 语句,但是有一个最重要的问题就是,代码是写死的。我们想要用户通过控制台来输入。
将上面的插入内容改成 ?,这是一个占位符,后续 PreparedStatement会把变量的数值带入到 ?中。

String sql = "insert into student values(?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Panalog 日志审计系统 前台RCE漏洞复现

0x01 产品简介 Panalog是一款日志审计系统,方便用户统一集中监控、管理在网的海量设备。 0x02 漏洞概述 Panalog日志审计系统 sy_query.php接口处存在远程命令执行漏洞,攻击者可执行任意命令,接管服务器权限。 0x03 复现环境 FOFA&#xf…

centos7配置tomcat

简介 Tomcat是一个使用Java编写的开源Web应用服务器,是由Apache Software Foundation管理的一个项目。它是一个轻量级的应用服务器,可以下载、安装和使用,而且还提供了许多高级功能,例如支持Java Servlet、JavaServer Pages (JSP)和JavaServer Faces (JSF) 等JavaEE技术,…

深度解析 Spring Security 自定义异常失效问题:源码剖析与解决方案

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

计算机视觉面试题-03

1、简单介绍一下sigmoid,relu,softplus,tanh,RBF及其应用场景 这里简单介绍几个激活函数及其应用场景: Sigmoid 函数(Logistic 函数): 公式: s i g m a ( x ) 1 1 e …

Python生成exe文件

Python如何生成exe文件 在终端执行 pip install pyinstaller 在终端执行pyinstaller E:\fund_data\GetFund.py,运行结束后会在D:\Python\Python311\Scripts\dist\目录下生成GetFund.exe文件 3.双击exe文件运行,如果未出现预期结果,可以把e…

2023.11.23使用flask实现在指定路径生成文件夹操作

2023.11.23使用flask实现在指定路径生成文件夹操作 程序比较简单,实现功能: 1、前端输入文件夹 2、后端在指定路径生成文件夹 3、前端反馈文件夹生成状态 main.py from flask import Flask, request, render_template import osapp Flask(__name__)a…

STM32USART+DMA实现不定长数据接收/发送

STM32USARTDMA实现不定长数据接收 CubeMX配置代码分享实践结果 这一期的内容是一篇代码分享,CubeMX配置介绍,关于基础的内容可以往期内容 夜深人静学32系列11——串口通信夜深人静学32系列18——DMAADC单/多通道采集STM32串口重定向/实现不定长数据接收 …

【Java学习笔记】71 - JDBC入门

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter25/src/com/yinhai/dao_ 一、JDBC概述 1.基本介绍 1. JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。 2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动…

C++ -- 每日选择题 -- Day2

第一题 1. 下面代码中sizeof(A)结果为() #pragma pack(2) class A {int i;union U{char str[13];int i;}u;void func() {};typedef char* cp;enum{red,green,blue}color; }; A:20 B:21 C:22 D:24 答案及解析…

ssm+vue的仓库在线管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的仓库在线管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三…

游戏反Frida注入检测方案

在游戏安全对抗过程中,有不少外挂的实现基于对游戏内存模块进行修改,这类外挂通常会使用内存修改器,除此之外,还有一种门槛相对更高、也更难检测的「注入挂」。 据FairGuard游戏安全数据统计,在游戏面临的众多安全风险…

Apipost推出IDEA插件,代码写完直接调试

IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件:Api…

【软件测试】白盒测试和黑盒测试

一、软件测试基本分类 一般地,我们将软件测试活动分为以下几类:黑盒测试、白盒测试、静态测试、动态测试、手动测试、自动测试等等。 黑盒测试 黑盒测试又叫功能测试、数据驱动测试或给予需求规格说明书的功能测试。这种测试注重于测试软件的功能性需…

python开发之个微批量删除好友

简要描述: 删除联系人 请求URL: http://域名地址/delContact 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wI…

探索前端设计的新境界——介绍IVueUI工具助力Vue页面设计

在快速发展的前端领域,Vue.js作为一款渐进式JavaScript框架,一直备受开发者喜爱。然而,在Vue前端开发的旅程中,页面设计常常是一个不可避免的挑战。今天,我要向大家介绍一款令Vue前端开发者受益匪浅的工具——www.ivue…

【微服务】java 规则引擎使用详解

目录 一、什么是规则引擎 1.1 规则引擎概述 1.2 规则引擎执行过程 二、为什么要使用规则引擎 2.1 使用规则引擎的好处 2.1.1 易于维护和更新 2.1.2 增强应用程序的准确性和效率 2.1.3 加快应用程序的开发和部署 2.1.4 支持可视化和可管理性 2.2 规则引擎使用场景 三、…

基于5G+物联网+SaaS+AI的农业大数据综合解决方案:PPT全文44页,附下载

关键词:智慧农业大数据,5G智慧农业,物联网智慧农业,SaaS智慧农业,AI智慧农业,智慧农业大数据平台 一、智慧农业大数据建设背景 1、应对全球人口快速增长带来的粮食生产压力,未来的粮食生产力必…

ERP软件对Oracle安全产品的支持

这里的ERP软件仅指SAP ECC和Oracle EBS。 先来看Oracle EBS: EBS的认证查询方式,和数据库认证是一样的。这个体验到时不错。 结果中和安全相关的有: Oracle Database VaultTransparent Data Encryption TDE被支持很容易理解,…

Android相机性能提高50%

文章目录 应用举例(可以不看这一part,直接跳过看具体怎么做):Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**Camera2 扩展 API 可以访问高级功能更多设备上的更多机会 正文:开始使用扩展架…

Redis String类型

String 类型是 Redis 最基本的数据类型,String 类型在 Redis 内部使用动态长度数组实现,Redis 在存储数据时会根据数据的大小动态地调整数组的长度。Redis 中字符串类型的值最大可以达到 512 MB。 关于字符串需要特别注意∶ 首先,Redis 中所…