【MySQL】从零开始的JDBC编程

news2024/11/23 18:39:38

1、JDBC的认识

学了这么久的 MySQL,我们一直采用的都是 MySQL 软件自带的客户端(黑框框),来进行跟MySQL服务器进行交互。但是在实际开发中我们很少在黑框框中手动输入SQL,大多数都是通过代码自动执行SQL的。既然大多数都是通过代码自动执行SQL的,那么就需要让其他编程语言来操作数据库服务器。

既然需要让其他编程语言来操作数据库服务器,那么首先就得让其他语言先写一个数据库客户端,然后让数据库客户端与数据库服务器进行交互,这样就可以通过代码自动执行SQL了

MySQL 提供了很多的 API,通过MySQL 提供的API可以让我们比较方便的实现一个MySQL客户端。MySQL的API原本是C语言风格的,但是考虑到 MySQL 使用的非常广泛,也提供了一些其他语言版本的API,但是其他版本的 API 本质上还是调用的是C语言风格的 API 也就是跨语言进行调用

Oracle、SQLServer、SQLite 等数据库都有各自API,不同的数据库 API 也是不同的。学习数据库编程,得学那么多API,这样不就提高了咱们程序猿学习的成本了么

于是在 Java 圈子里,就有大佬把这些API统一成了一套,这套API就是JDBC,JDBC这套API已经成为了Java 标准库的一部分了,由于 Java 影响力很大,以自身作为标准,此时各种数据库厂商都提供了能够适应 JDBC 相关的“驱动包”(驱动包就相当于API 的具体实现)。此时只有掌握了JDBC这套API,无论操作哪个数据库,操作的代码都是基本相同的

JDBC:屏蔽了不同数据库元素API之间的差异,使用同一套API接口规范了所有数据库的编程操作

有了 Java这个标杆之和,后面的语言都纷纷跟进,Python,GO,C#这些语言也都开始做类似的事情了

2、JDBC的使用

2.1 下载对应数据库的驱动包

JDBC屏蔽了不同数据库原生API之间的差距,使用同一套API接口来规范了所有数据库的编程操作

驱动包是数据库厂商实现的,所有我们要去官网或中央仓库中下载

我们这里就主要讲解如何去Maven中央仓库中下载:

  • 第一步:输入Maven中央仓库链接(大家可以关注下述公众号,发送Maven即可获取哦!)

  • 第二步:在 Maven 中央仓库搜索框中搜索mysql

  • 第三步:找到 MySQL Connector Java

  • 第四步:找到 5.1 开头的版本

  • 第五步:点击 jar,即可下载

下载完成后,本地指定存储位置就有一个这样的文件:

这个文件的后缀为.jar,这是一个Java的压缩包

2.2 把 jar 包导入到项目中

第一步:在项目中创建一个目录,把.jar拷贝进去

第二步:将lib目录,添加为依赖库,依赖目录名字可以随便取

2.3 编写数据库代码

JDBC 里面的 API 虽然很多,但是都是固定套路。JDBC里面的很多关键API都是 interface 接口,它们都是由具体的数据库驱动包来提供对应的实现类

接下来我们就用 JDBC 编程来实现 MySQL 的增删查改

用 JDBC 编程进行增删查改,是对指定库中指定表进行操作的,所以在JDBC编程之前需要考虑对数据库中的哪个库,哪个表进行操作,然后再进行 JDBC 编程

2.3.1 增加

public static void main(String[] args) throws SQLException {
        //1.创建数据源,描述数据库服务器在哪
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf8&useSSL=false");
        //设置数据库所在位置,当前固定写法
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");

        //2.连接,选中后 Alt + Enter 将受查异常抛给调用者处理
        Connection connection = (Connection) dataSource.getConnection();

        //3.构造 SQL 语句
        String sql = "insert into student value(?,?)";
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入id:");
        int id = scanner.nextInt();
        System.out.print("请输入name:");
        String name = scanner.next();
        //JDBC 中还需要搭配一个特定的对象,来描述这里的 SQL 的情况
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);

        //4.执行 SQL,针对增删改,使用 executeUpdate ,针对查,使用 executeQuery
        //返回结果的含义是,这个操作影响了几行
        int ret = statement.executeUpdate();
        if (ret != 0) {
            System.out.println("增加成功");
        }

        //5.断开连接,释放资源
        statement.close();
        connection.close();
    }

代码解析:

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

DataSource dataSource = new MysqlDataSource();

向上转型,DataSource 是一个 interface 的接口类,我们下载的驱动包中的MysqlDataSource实现了这个DataSource接口类

((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf8&useSSL=false");

向下转型,调用MysqlDataSource里面的 setUrl 方法来描述数据库服务器在哪

((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("111111");

root:root是 mysql 自带的用户名,也可以配置成其他的,如果没有配置成其他的默认就是 root

111111:这个是登录数据库的密码

问题:为什么不直接用 MysqlDataSource dataSource = new MysqlDataSource(),这样不就不需要向下转向了么,为什么要先向上转型再向下转型呢?

答:因为 MysqlDataSource 是 MySQL 驱动包中的,DataSource 是 JDBC 中的。不同的驱动包中实现DataSource 的类是不同的,代码中使用 DataSorce 类型的实例,可以避免 MysqlDataSource 这个名字扩散到代码的各个地方,未来要换数据库只需要改动创建数据源代码即可

2.连接操作

上面的数据源的创建操作,只是描述了服务器在哪,并没有真正进行访问。只有连接了,才能真正的开始通过网络进行通信

Connection connection = (Connection) dataSource.getConnection();

Conection:意为“连接”

在连接的时候会有受查异常,我们直接按键盘上的 Alt+Enter 键抛给调用者处理

3.构造SQL

连接建立后,我们就可以构造SQL来操作数据库了

String sql = "insert into student value(?,?)";
Scanner scanner = new Scanner(System.in);
System.out.print("请输入id:");
int id = scanner.nextInt();
System.out.print("请输入name:");
String name = scanner.next();

先用字符串类型存储命令,把输入的实参通过变量来存储

PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);

再搭配一个特定的对象,来描述这里的 SQL 的情况,将实参替换到SQL语句中

4.执行SQL

int ret = statement.executeUpdate();
if (ret != 0) {
    System.out.println("增加成功");
}

增删改操作使用 executeUpdate来执行 ,查操作使用 executeQuery来执行

返回结果的含义是,这个操作影响了几行

5.断开连接,释放资源

statement.close();
connection.close();

先释放里面的资源,再释放外面的资源

2.3.2 查询

public void selData() throws SQLException {
    DataSource dataSource = new MysqlDataSource();
    ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("111111");
    Connection connection = (Connection) dataSource.getConnection();
    String selSql = "select * from student order by id asc";
    PreparedStatement statement = connection.prepareStatement(selSql);
    ResultSet resultSet = statement.executeQuery();
    while (resultSet.next()) {
        Student student = new Student();
        student.setId(resultSet.getInt("id"));
        student.setName(resultSet.getString("name"));
        System.out.println(student);
    }
    System.out.println("查询成功");
    resultSet.close();
    statement.close();
    connection.close();
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单片机第一季:零基础4——LED点阵

1,第八章-LED点阵 如何驱动LED点阵: (1)单片机端口直接驱动。要驱动8*8的点阵需要2个IO端口(16个IO口)、要驱动16*16的点阵需要4个IO端口(32个IO口)。 (2)使用串转并移位锁存器驱动。要驱动16*16点阵只需要…

7.3Java EE——Bean的实例化

一、构造方法实例化 下面通过一个案例演示Spring容器如何通过构造方法实例化Bean。 &#xff08;1&#xff09;、在IDEA中创建一个名为chapter07的Maven项目&#xff0c;然后在项目的pom.xml文件中配置需使用到的Spring四个基础包和Spring的依赖包。 <dependencies>&…

让白嫖来的阿里云服务器来跑jupyter

文章目录 概要第一步 注册账号并创建实例第二步 连接实例并安装相关软件和依赖包安装python3更新pip安装jupyter生成jupyter配置文件配置之后访问云服务器jupyter的密码修改jupyter配置文件在后台启动jupyter 第三步 访问云服务器上的jupyter结语 概要 按照一般情况&#xff0…

【云原生|Docker系列第2篇】Docker的安装和配置

欢迎来到Docker入门系列的第二篇博客&#xff01;在上一篇博客中&#xff0c;我们已经介绍了Docker的基本概念和作用&#xff0c;以及为什么它成为现代应用开发和部署的关键技术。本篇博客将着重讨论Docker的安装和配置&#xff0c;帮助您开始使用Docker并为您的应用程序提供一…

对于加密数据(数据库字段级别加密)存储和并搜索的一些调查

一、简述 如果您认为不良行为者不可避免地会进入您的网络&#xff0c;那么在将敏感数据放入数据库或文档存储之前对其进行加密是保护数据的最佳方法。对于敏感数据应该这么做。这种在存储之前进行加密的方法称为应用层加密&#xff0c;有相当数量的公司使用它来保护其敏感数据。…

MATLAB 迭代最近点ICP配准 (23)

MATLAB 迭代最近点ICP配准 (23) 一、算法介绍二、具体代码1.流程2.代码3.函数详解4.结果展示一、算法介绍 ICP 迭代最近点配准方法,基本是一种固定的点云精配准方法,其变种很多,这里是点到点的传统点云ICP配准方法,具体的过程如上图所示:需要提供红色和蓝色两组点云,其…

echarts 字符串模板和formatter的使用(鼠标悬浮显示的气泡自定义)

需求&#xff1a;在鼠标悬浮中加一个总数字段&#xff0c;图1为默认&#xff0c;图2为需要实现的效果 有两种方式&#xff0c;第一种&#xff1a;在图表添加一条新的图形&#xff0c;默认会自动添加 需要在整个数据列表中计算出来成为新的数组 methods: {// 根据自己的业务情…

SpringBoot源码分析(4)--Environment(下)/配置文件加载原理

SpringBoot源码分析 SpringBoot源码分析(1)–SpringBootApplication注解使用和原理/SpringBoot的自动配置原理详解SpringBoot源码分析(2)–SpringBoot启动源码(万字图文源码debug讲解springboot启动原理)SpringBoot源码分析(3)–Environment简介/prepareEnvironment准备环境&a…

UNet训练自己的数据集

pycharm中python环境设置&#xff1a; 打开左上角File ---> Settings ---> 如下图 ---> Add 选择合适的python版本&#xff0c;进行环境设置 UNet训练自己的数据集&#xff1a; 一、训练自己的数据集 1、本文使用VOC格式进行训练。 2、训练前将标签文件放在VOCde…

谈 Dojo 应用的 UI 自动化测试

目录 前言&#xff1a; Dojo 是什么&#xff1f; Dojo 应用 UI 自动化测试面临的挑战 A. 异步请求的处理 B. 元素定位 图 1. Dojo 按钮小部件 C. Dojo 复杂性 D. 产品复杂性 E. 频繁的 UI 更改 F. Dojo 升级 Dojo 应用 UI 自动化测试框架挑选&#xff08;设计&#…

IIS WebApi: 文件上传,大小限制,提示413 (Request Entity Too Large)

问题&#xff1a;IIS WebApi文件上传&#xff0c;大小限制&#xff0c;提示413 (Request Entity Too Large) 一&#xff1a;在web.config上配置,按照以下格式&#xff0c;将下列标红加粗的地方&#xff0c;按照对应位置复制到web.config中&#xff0c;即可解决。 注&#xff…

本质安全设备标准(IEC60079-11)的理解(五)绝对可靠器件infallible components

在前面的章节中我们简单提及到绝对可靠器件&#xff0c; 这里重新摘抄如下&#xff1a; “这里顺便说一下可靠元器件&#xff08;infallible component&#xff09;的理解。它在标准里面占有不少的章节&#xff0c;而且开始理解他也有一些费劲。本人从两个方面理解它 &#x…

工艺流程图绘制流程?试试这样绘制

工艺流程图绘制流程&#xff1f;绘制工艺流程图可以帮助我们更好地理解工艺流程&#xff0c;确定生产流程&#xff0c;优化生产效率&#xff0c;并帮助人们更好地进行生产管理和质量控制。通过工艺流程图&#xff0c;我们可以清晰地了解每一步骤所需的设备和材料&#xff0c;以…

【Java】基于云计算-智慧校园电子班牌系统源码带原生微信小程序端

一、前言 智慧校园系统是利用物联网和云计算&#xff0c;强调对教学、科研、校园生活和管理的数据采集、智能处理、为管理者和各个角色按需提供智能化的数据分析、教学、学习的智能化服务环境。它包含“智慧环境、智慧学习、智慧服务、智慧管理”等层面的内容。 智慧校园描绘的…

webpack笔记一

文章目录 什么是webpack安装webpack一、创建配置项二、安装webpack局部安装(推荐)全局安装 三、安装webpack-cli(可选) 核心概念入口(entry)出口(output)loader插件(plugin)模式(mode) 项目实例webpack基本使用 html打包插件&#xff1a;html-webpack-plugin文件拷贝插件&#…

电子版简历有哪些(合集)

word、Excel、PPT简历 传统的电子版简历&#xff0c;即用文档软件编辑的简历。这一类简历的呈现模式只有单一的文字、图片或表格。传统&#xff0c;意味着被广泛求职者所使用。优点包括有&#xff1a;传统、端庄、直观。但传统也意味着没有创新。缺点包括有&#xff1a;乏味、不…

Gradle下载和配置教程:Windows、Mac和Linux系统安装指南

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

linux入门练级篇 第三讲 基本指令3

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

如何使用ChatGPT制作免费的数字人

传统的数字人制作过程 制作属于自己的免费的数字人是一个复杂的过程&#xff0c;需要涉及多个方面的知识和技术。以下是一个大致的步骤指南&#xff0c;以帮助你开始这个过程&#xff1a; 1. 确定数字人的目标和设计&#xff1a;首先&#xff0c;你需要确定数字人的用途和目标…

PPT里动画连续多次移动一个元素

PPT里有移动动画, 每次只可以移动一次. 其实可以再此添加移动动画, 但是注意新添加的动画移动轨迹是从原先的位置开始的: 如果想要其连续移动, 那么可以把第二次开始的起点拖动到第一次移动的终点上去: