【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);

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

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

相关文章

Vscode工具使用指南

通用 快捷键文件 / 编辑查找 / 替换窗口插件主题 连接linux 快捷键 文件 / 编辑 新建文件:CtrlN放大或缩小:Ctrl /-代码行缩进,展开:Ctrl[ 和 Ctrl]在当前行下方插入一行:CtrlEnter在当前行上方插入一行:…

【方块消消乐】方块消除游戏-微信小程序开发流程详解

有做过俄罗斯方块游戏小程序的经验,这次有做了一个消灭方块的游戏,实现过程很顺利,游戏看着和之前做的俄罗斯方块游戏很像,这里调整了玩法,试玩感觉还可以,接下来给大家讲一讲消灭方块游戏开发过程。 俄罗斯…

Unity2D-URP基于ShaderGraph创建带粒子特效的激光光束

文章目录 创建Shader新建Node: UV新建Node: Split......参数说明 基于Shader创建Material创建Line创建粒子系统StartVFX创建粒子材质更改粒子系统的材质设置透明模式设置粒子效果创建一个Beam设置EndVFX效果预览激光光束管理脚本最终预览 创建Shader Create --> Shader Gra…

Redis面试题:Redis的数据淘汰策略有哪些?

目录 面试官:Redis的数据淘汰策略有哪些 ? 面试官:数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据 ? 面试官:Redis的内存用完了会发生什么? 面试官:Redis的数据淘汰策略有哪些 ? …

掌握文件夹重命名技巧:字母大小写批量转换的实用操作

在这个数字化时代,经常要与各种文件和文件夹打交道。有时候,为了提高工作效率或整理文件,要对文件夹名称进行修改。其中,字母大小写的转换是一个常见的需求。例如,将所有文件夹名称中的大写字母转换为小写字母&#xf…

【Linux系统编程】冯 • 诺依曼体系结构(什么是冯 • 诺依曼体系结构?冯 • 诺依曼体系结构如何应用?)

目录 一、前言 二、什么是冯 • 诺依曼体系结构? 💦 冯 • 诺依曼体系结构的发展推导 💦冯 • 诺依曼体系结构的5大部件 ⭐输入和输出设备 ⭐存储器 ⭐中央处理器(CPU) 💦冯 • 诺依曼体系结构的细节…

《数据结构、算法与应用C++语言描述》-二叉树与其他树-二叉树的C++实现-设置信号放大器与并查集问题

二叉树和其他树 可编译运行程序见:Github::Jasmine-up/Data-Structures-Algorithms-and-Applications/_23BinaryTree 定义 树 定义 11-1 一棵树 t是一个非空的有限元素的集合,其中一个元素为根(root),其余的元素&a…

Python 测试框架 Pytest 的入门

简介 pytest 是一个功能强大而易于使用的 Python 测试框架。它提供了简单的语法和灵活的功能,用于编写和组织测试代码。 1、简单易用:pytest 的语法简洁明了,使得编写测试用例更加直观和易于理解。它使用 assert 语句来验证预期结果&#x…

Java进阶(第二期):package 包 抽象类和抽象方法 接口的实现 多态的实现 综合继承、接口、多态的使用。

2023年11月26日20:11:11 文章目录 Java进阶(第二期)一、package包的概念二、抽象类和抽象方法(abstract)2.1 使用2.1 抽象类注意事项 三、接口3.1 接口的定义格式3.2 接口成员特点3.3 类和接口的关系3.4 接口和抽象类的对比 四、多态4.1 多态的前提条件4…

4G模块(EC600N)通过MQTT连接华为云

目录 一、前言 二、EC600N模块使用 1.透传模式 2.非透传模式 3、华为云的MQTT使用教程: 三、具体连接步骤 1、初始化检测 2、打开MQTT客户端网络 3、创建产品 4、创建模型 5、注册设备 6、连接客户端到MQTT服务器 7、发布主题消…

2023-11-26 事业-代号s-跨境物流-记录

摘要: 2023-11-26 事业-代号s-跨境物流-记录 跨境物流: 【结论】 中小卖家(最低适合1个人经营的卖家)首选以下两种物流,目前已知的是以下两种,后续有新的发现再更新。 1、云途物流(YunExpress)&#xff…

2016年五一杯数学建模A题购房中的数学问题解题全过程文档及程序(采光与房款)

2016年五一杯数学建模 A题 购房中的数学问题 原题再现 随着现代社会经济的快速发展,房地产成为国家经济发展中重要的经济增长点之一。为了充分利用楼房建设的土地面积,开发商经常会选择建筑高层住宅。在购买住房时,影响消费者选择购房的因素…

企业文档文件管理软件推荐:提升管理效率与数据安全性

Zoho WorkDrive企业网盘是一种高效的文件管理工具,它不仅可以为组织搭建统一、高效、安全、智能的内容管理体系,还能够提供大规模支撑、海量数据处理、非结构化数据治理、智能挖掘与洞察等服务能力。通过这些服务,企业可以更好地管理和利用其…

Linux 面试题(一)

目录 1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 2、怎么查看当前进程?怎么执行退出?怎么查看当前路径? 3、怎么清屏?怎么退出当前命…

更改MacBook壁纸,有时可以带来不一样的感觉,特别是动态壁纸

在我看来,买一台新的MacBook最棒的部分就是挑选一张完美的桌面壁纸,为我的新工作伙伴定下基调。有时,在真正更换壁纸之前,我会花一整天的时间,仔细决定我的新笔记本电脑到底是什么样子,而且由于Macbook如此…

使用项目管理工具进行新媒体运营管理的策略与方法

使用Zoho Projects项目管理工具,新媒体运营可轻松驾驭从策划选题、撰写到排期发布的全流程。运用项目管理工具对新媒体运营进行精细化管理,助力团队更高效地规划、执行和追踪各项任务与活动。 以下是运用项目管理工具管理新媒体运营的妙招: 1…

软件测试面试题之如何进行项目介绍

邯郸网上银行系统旨在为企业搭建安全便捷的账户管理,资金汇化及投资服务通道,提升企业财富与价值增值它主要包含首页、我的账户、信用卡、邮储业务、投资理财、转账汇款、个人贷款等模块。 个人贷款一般有抵押贷款,和信用贷等,房…

【算法萌新闯力扣】:回文链表

力扣题目:回文链表 开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦!那从现在起,我的算法题更新会按照算法村的给的路线更新,更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知…

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

文章目录 前言分析解决方案一:替换创建项目的源方案二:升级JDK版本 参考文献 前言 起因 想创建一个springboot的项目,本地安装的是1.8,但是在使用Spring Initializr创建项目时,发现版本只有17和21。 在JDK为1.8的情况下…