MySQL数据库之JDBC编程(从认识到操作)

news2024/9/22 1:07:15

目录

前言

一.JDBC的认识

1.1JDBC的来源

1.2JDBC的概念

二.JDBC的导包 

三.JDBC的四步操作

三.JDBC常用的类和方法

 3.1常用类

3.2常见方法


🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
🎥 本文由 tq02 原创,首发于 CSDN🙉
🎄 本章讲解内容:JDBC的详细讲解

🎥学习专栏:  C语言         JavaSE       MySQL基础  

前言

        我们学习过许多编程语言,例如C、C++、java等语言,那么我们能不能使用这种编程语言来操作数据库呢?实际上,我们很少会直接操作数据库,大部分情况下,我们使用代码来操作数据库,使用代码也是需要依赖于SQL语句。

注:在学习本博文,需要学会MySQL数据库的基本的操作。

一.JDBC的认识

1.1JDBC的来源

        数据库有很多种类,而不同的数据库都需要进行编程时,都需要使用数据库驱动包 ,不同的数据库,对应不同的编程语言提供了不同的数据库驱动包。例如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包;基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

        可是在实际而言,很多公司使用的数据库都不一样,那难道我需要掌握所有的数据库驱动包嘛?那岂不是需要投入大量的世界成本?因此在Java中出现了JDBC,它可以为多种数据库提供统一访问。

如此一来就不需要掌握各种驱动包的用法,只需掌握JDBC的用法。 

注:JDBC只存在于Java,而C++没有。

1.2JDBC的概念

        JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成。

        JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发者能够编写数据库的程序。简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

二.JDBC的导包 

第一步:创建项目

第二步:下载MySQL驱动包,下载途径:MySQL驱动包下载  已下载可以跳过此步骤

 点击进去,会发现很多版本,下载的版本需要与MySQL服务器版本一致(小版本无所谓,大版本要一致)。

点击对应版本下载页面:

 第三步:将下载的驱动包导入到项目的目录当中
创建一个Directory目录,自命名,直接将mysql-connector-java-版本号.jar 复制到其中

      

 第四步:右击jar包,点击Add as Library,从而进行最后的导包。

 

三.JDBC的四步操作

        目前已经导包成功,我们先要加载MySQL的驱动类或者创建数据源=>知道数据库服务器的位置,使Java连接上MySQL数据库,因此我们需要建立数据库的连接,接着便是需要相关的类进行操作SQL语句。   使用JDBC操作数据库的主要步骤如下图:

  •  创建数据源并连接

数据的连接方式虽然有2种,但是在实际情况下,我们经常使用创建数据源来连接,并且DriverManager类来获取的Connection连接,是无法重复利用的,DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的

//1.创建数据源 DataSource是JDBC接口、  MySQLDataSource是MySQL驱动包提供的类
        DataSource dataSource=new  MysqlDataSource();

        //获取数据库的库名
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/tq02? characterEncoding=utf8&useSSL=false");

        //数据库服务器的账户和密码
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("2222");

 // 2. 和数据库服务器建立连接~~
     Connection connection = dataSource.getConnection();

       虽然可以直接创建MySQLDataSource类,不需要通过向上转型,但是通过向上转型,可以降低MySQL驱动包和项目代码之间的耦合关系,避免更换数据库时的太大的成本。

        url唯一资源定位符,使用url描述网络上一个资源位置,MySQL本质是服务器,相当于网络上的资源。

         Connection类使用的是java.sql的,其他的不行,并且getConnection()异常,需要进行处理(throws或者try.....catch)。


  •  构造SQL语句

构造语句有2种方法,

  1. 直接构造,输入sql语句,固定数据写法
  2. 使用占位符("?")来代替具体的参数值,数据不固定。

直接写法实例: 

// 3.构造SQL语句 
    String sql = "insert into student values(1, "tq02")";
    PreparedStatement statement = connection.prepareStatement(sql);

    String sql2 = "select * from student ";
    PreparedStatement statement = connection.prepareStatement(sql2);

使用占位符实例:

// 3.构造SQL语句 
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name = scanner.next();   
//使用?来表示占位符,后期由用户输入获取
    String sql = "insert into student values(?, ?)";
    PreparedStatement statement = connection.prepareStatement(sql);
// 1代表第一个问号、2代表第二个问号          
          statement.setInt(1, id);
          statement.setString(2, name);
 

解析:JDBC提供了Statement(语句)对象,把String转换为Statement再发给服务器执行,但是一般而言会使用PreparedStatment对象来代替Statement

原因:Statement是原封不动将sql语句发送到数据库服务器,而PreparedStatment则会先解析一遍sql语句,判断语法格式是否正确,再发送到数据库服务器,从而降低服务器的负担


  • 执行sql语句

 执行sql语句需要使用到2个方法:

  1. ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
  2. int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,返回一个操作的行数

:查询出来的结果全在ResultSet对象中,需要进行遍历得到结果。

使用executeUpdate()实例:

// 构造SQL语句 
    String sql = "insert into student values(1, "tq02")";
    PreparedStatement statement = connection.prepareStatement(sql);

// 执行 SQL 语句~. 返回值就是 "这次操作影响到几行"
    int n = statement.executeUpdate();
    System.out.println("n = " + n);

使用executeQuery()实例:

//创建SQL语句
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);
        }

  •  释放必要的资源,关闭连接

        最后一步了,sql语句执行完毕之后,需要进行释放,创建的语句对象和连接对象都会持有一些计算机资源,当不用了,需要释放。Java当中虽然会有“垃圾回收”机制,可自动释放内存,但是,计算机资源不仅仅是内存。

 // 5. 释放必要的资源. 关闭连接.
        resultSet.close();
        connection.close();
        statement.close();

:释放资源,关闭顺序和创建顺序相反。

三.JDBC常用的类和方法

 3.1常用类

  1. java.sql.DriverManager:用于管理JDBC驱动程序的类,负责加载和注册驱动程序。
  2. java.sql.Connection:表示与数据库的连接,用于创建和执行SQL语句。
  3. java.sql.Statement:用于执行静态SQL语句并返回结果的对象。
  4. java.sql.PreparedStatement:继承自Statement,用于执行预编译的SQL语句,可以提高性能和安全性。
  5. java.sql.ResultSet:表示数据库结果集的数据表,用于存储查询结果
  6. javax.sql.DataSource:提供了连接池的功能,用于管理数据库连接。
  7. java.sql.SQLException:处理与数据库连接和操作相关的异常。

3.2常见方法

1. DriverManager类的getConnection()方法

        通过传入数据库的URL、用户名和密码来获取一个Connection对象,从而连接数据库

2.Statement对象的executeQuery()方法

       执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。

3.Statement对象的executeUdpdate()方法 

        执行增、删、改的sql语句,返回的行数

4.ResultSet对象的next()方法

        遍历结果集中的每一行数据,并使用getXXX方法获取每一列的值。

5. Connection对象的setAutoCommit()方法

        设置是否自动提交事务,使用commit方法提交事务,使用rollback方法回滚事务。

6. Connection、Statement和ResultSet对象的close()方法

        关闭数据库连接、释放资源。

        JDBC的并不难,难的是理解,只要看懂了操作步骤,其他的也能顺其自然的理解到位。

                                                                                                        ---------懒惰的tq02

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

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

相关文章

芯片制造详解.光刻技术与基本流程.学习笔记(四)

本篇文章是看了以下视频后的笔记提炼,欢迎各位观看原视频,这里附上地址 芯片制造详解04:光刻技术与基本流程|国产之路不容易 芯片制造详解.光刻技术与基本流程.学习笔记 四 一、引子二、光刻(1).光掩膜(2).光刻机(3).光刻胶(4).挖…

matplotlib实现动态显示图片

plt.ion()打开交互开关 plt.ioff()关闭交互开关 plt.pause(0.1)暂停0.1秒 plt.clf()#清除当前的Figure图像 plt.cla()#清除当前的Axex图像 import matplotlib.pyplot as plt import numpy as np import time from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg…

计算机二级Python基本操作题-序号43

1. # 键盘输入一句话,用jieba分词后,将切分的词组按照在原话中逆序输出到屏幕上,词组中间没有空格。 示例如下: 输入: 我爱老师 输出: 老师爱我 import jieba txt input (请输入一段中文文本:)…

零拷贝原来这么简单!

我们总会在各种地方看到零拷贝,那零拷贝到底是个什么东西。 接下来,让我们来理一理啊。 拷贝说的是计算机里的 I/O 操作,也就是数据的读写操作。计算机可是一个复杂的家伙,包括软件和硬件两大部分,软件主要指操作系统…

【自动化测试】Jest体验之旅

目录 简介 快速体验 配置文件 Jest CLI 选项 --watchAll --watch 使用 ES6 模块 简介 Jest 是 Facebook 出品的一个 JavaScript 开源测试框架。相对其他测试框架,其一大特点就是就是内置了常用的测试工具,比如零配置、自带断言、测试覆盖率工具等…

从二叉搜索树到红黑树

二叉搜索树(Binary Search Tree) 特性 任意一个节点的所有左子树都比它小,所有右子树都比它大; 复杂度 当我们查找某个节点的时候,先从根节点开始比较,如果比根节点大走右子树,如果比根节点…

码农该如何延长周末体验感

码农该如何延长周末体验感 码农该如何延长周末体验感 码农该如何延长周末体验感1.制定合理的工作计划:2.实践工作与生活的平衡:3.学习新技术或扩展知识领域4.参与开源项目或个人项目:5.与同事或朋友组织活动:6.自己写博客或者总结…

jeecgboot新建moudle,但是访问404,需要在open moudle setting 里面设置

jeecgboot新建moudle&#xff0c;但是访问404&#xff0c;需要在open moudle setting 里面设置 首先需要确定以下3个pom.xml 最最外层的pom.xml 最最外层的pom.xml <modules><module>jeecg-boot-base-core</module><module>jeecg-module-demo</m…

string类(使用+实现)(C++)

string string类“登场”string类 - 了解string类的常用接口常见构造容量操作访问及遍历操作迭代器分类作用 增删查改操作非成员函数 string类的实现string类重要的方法实现分析介绍构造函数拷贝构造函数赋值运算符重载总结 string类整体实现代码 写时拷贝&#xff08;了解&…

金三银四好像消失了,IT行业何时复苏!

疫情时候不敢离职&#xff0c;以为熬过来疫情了&#xff0c;行情会好一些&#xff0c;可是疫情结束了&#xff0c;反而行情更差了&#xff0c; 这是要哪样 我心中不由一万个 草泥&#x1f434; 路过 我心中不惊有了很多疑惑和感叹&#xff01; 自我10连问 我的心情 自去年下…

什么是合者生情?

有人说&#xff0c;自己的命运自己掌握&#xff0c;但必须以预知自己命运如何为前提。 若不知道自己的命运如何&#xff0c;却要掌握自己的命运&#xff0c;那只是一句空话&#xff0c;是自欺欺人。 而易学在我国历史上&#xff0c;直至现在&#xff0c;都起到了重大而深远的作…

Python入门【LEGB规则、面向对象简介、面向过程和面向对象思想、面向对象是什么? 对象的进化 、类的定义、对象完整内存结构 】(十三)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

ARM裸机-5

1、可编程器件的编程原理 1.1、电子器件的发展方向 模拟器件-->数字器件 ASIC-->可编程器件 1.2、可编程器件的特点 CPU在固定频率的时钟控制下节奏运行。 CPU可以通过总线读取外部存储设备中的二进制指令集&#xff0c;然后解码执行。 这些可以被CPU解码执行的二进制指…

SpringBoot临时属性设置

在Spring Boot中&#xff0c;可以通过设置临时属性来覆盖应用程序中定义的属性。这在某些情况下很有用&#xff0c;例如在命令行中指定配置参数或在测试环境中覆盖默认值。 你可以使用--&#xff08;双破折号&#xff09;语法来设置临时属性。以下是一些示例&#xff1a; 1. …

【点云处理教程】04 Python 中的点云过滤

一、说明 这是我的“点云处理”教程的第 4 篇文章。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在本教程中&#xff0c;我们将学习如何使用 Open3D 在 python 中过滤点云以进行下采样和异常值去除。使用 Open…

【GitOps系列】在 GitOps 工作流中实现蓝绿发布

文章目录 前言蓝绿发布概述手动实现蓝绿发布创建蓝色环境创建蓝色环境 Ingressroute部署绿色环境切换到绿色环境 蓝绿发布自动化安装 Argo Rollout创建 Rollout 对象创建 Service 和 Ingress访问蓝色环境发布自动化 访问 Argo Rollout Dashboard自动化原理结语 前言 在前几篇【…

Netty学习(四)

文章目录 四. 优化与源码1. 优化1.1 扩展序列化算法jdk序列化与反序列化Serializer & AlgorithmConfigapplication.properties MessageCodecSharableMessage&#xff08;抽象类&#xff09; 测试序列化测试反序列化测试 1.2 参数调优1&#xff09;CONNECT_TIMEOUT_MILLIS2&…

最强,自动化测试-自定义日志类及日志封装(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 在自定义日志之前…

【机器学习】习题3.3Python编程实现对数几率回归

参考代码 结合自己的理解&#xff0c;添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt from sklearn import linear_model导入数据&#xff0c;进行数据处理和特征工程 # 1.数据处理&#x…

Windows系统如何修改文件日期属性

winr键&#xff0c;输入powershell,在弹出的命令窗口输入命令&#xff0c;案例如下&#xff1a; file_address E:\_OrderingProject\\PIC1101\ldv1s_0830_ec_result.tiftime_change "07/12/2022 20:42:23" 修改文件创建时间&#xff1a;creationtime $(Get-Item fi…