MySQL之JDBC

news2024/9/23 19:21:04

 💕"我像离家的孤儿,回到了母亲的怀抱,恢复了青春。"💕

作者:Mylvzi 

 文章主要内容:MySQL之JDBC 

  一.什么是JDBC?

  JDBC编程就是通过Java 代码来操纵数据库   

  数据库编程, 需要数据库服务器提供一些API供程序员使用  ,不同的sql服务器有不同的API,那我们mysql,oracle,sqlserver都有自己的API,那这些API需要我们都去学习么?不需要,因为Java凭借其市场份额,和数据库厂商制定了一套数据库编程规范,即所有的数据库服务器的API都能通过这套API的规范来实现

  具体是怎么实现的呢?数据库的厂商设计出了他们专属的"驱动器",在我们些项目的时候,可以把使用到的数据库服务器的驱动器安装到对应的包下,就可以将数据库的API转化为规范的API

  所谓的驱动器其实是一个驱动程序,它本质上是一个软件,是由厂商提供的,作用类似于"转接头",将自己原生的API转接为JDBC对应的API

二.安装驱动程序

  如果想在项目中使用MySQL就需要安装MySQL的驱动程序,并将其放到对应的包之下

下面以mysql为例

首先要先去安装驱动包,可以去中央仓库进行下载(方便)

Maven Repository: mysql » mysql-connector-java » 5.1.48 (mvnrepository.com)

注意:下载的驱动器的版本要和你的MySQL服务器相对应,我的MySQL服务器是5,所以下载的驱动器也是5版本

1.先在src下创建一个"lib"的包(引入第三方包常用名称)

2.在lib包之下复制刚才下载的驱动器

三.开始编码!!!

  以上都是准备工作,接下来开始进行编码

  总体来说分为5步

1.准备数据源

  进行数据库编程需要先进行数据准备,数据准备是通过DataSource这个接口实现的,数据源的准备分为四步

  • 实例化实现DataSource接口的对象
  • 建立URL
  • 设置用户名
  • 设置密码

1.实例化对象 

代码

DataSource dataSource = new MysqlDataSource();

源码: 

2.建立URL 

代码

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

解析 

  这么长的字符串大家不用记忆、下次使用的时候直接复制粘贴即可,这里也叫给大家一个记忆的例子,整个字符串的逻辑还是很简单的

3.设置用户民 和密码

代码

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

root是MySQL默认的自带的用户,密码是登录MySQL的密码

完整代码:

        // 1.准备数据源  实例化对象 建立URL  设置用户名和密码
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

以上只是准备工作  还并没有和mysql进行通信  接下来进行通信 

2.和数据库建立连接

代码

        // 2.和数据库服务器建立连接  连接好了之后才能进行后序的  "请求--响应" 操作
        Connection connection = dataSource.getConnection();// 此处会报错  需要抛出异常 直接使用throws进行抛出

注意处理异常

此处要注意选择正确的Connection接口

3.构造sql

  构造sql就是将sql命令使用字符串的形式存储到一个字符串变量中,再进行预处理

// 3.构造sql  sql语句最后不需要再去添加;  命令行的时候添加;
        String sql = "insert into student values(3,'张三')";
        PreparedStatement statement = connection.prepareStatement(sql);

  为什么我们要进行sql语句预处理呢?其实也有办法直接让服务器去执行,但是服务器会对传入的字符串进行解析,校验,且传入的字符串可能出现语法错误

进行预处理相当于提前进行检查,会对传入字符串进行解析,校验,看有没有错误的地方,并将字符串解析为结构化数据,这样服务器就不需要再去解析,校验,增加了效率 

4.发送给服务器,执行sql

  通过预处理过后的语句statement向数据库传递数据

代码

// 4. 将sql发送给服务器 执行sql
        int n = statement.executeUpdate();
        System.out.println(n);

最常用的两种方法

 代码

 // 将id为3的人的名字设置为王五
        String sql2 = "update student set name = '王五' where id = 1";
        PreparedStatement statement2 = connection.prepareStatement(sql2);

5.释放资源

程序通过代码和数据库建立通信,是需要消耗软件/硬件资源的,,当你不再使用数据库时,要把利用的资源返还(好借好还么)

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

四.补充:

1."?"占位符

在插入语句里面我们把内容写死了,哪能不能让用户自己输入要插入的内容呢?答案是可以的

可以使用JDBC中的占位符 ?

 

2.详细解释为什么不能传递字符串类型的sql语句

  在jdbc编程中不能传递字符串类型的SQL语句主要出于安全和性能两方面进行考虑 

安全上:传递字符串类型的SQL语句引发SQL注入,SQL注入是一种常见的SQL中的漏洞。用户可能传递恶意的代码(尤其是字符串拼接容易发生)来使数据库执行未经授权的操作,从而给数据库服务器带来危险

性能上:使用预编译语句能够提高性能。预编译是指将SQL语句进行预编译处理,并将其存储到数据库服务器之中,下次使用时只需传递参数即可,提高了执行的效率。通过预编译,可以减少数据库对SQL的检查和解析,提高了效率

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

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

相关文章

C语言每日一题(42)删除链表的倒数第N个结点

力扣网 19 删除链表的倒数第N个结点 题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head …

Linux下查看目录大小

查看目录大小 Linux下查看当前目录大小,可用一下命令: du -h --max-depth1它会从下到大的显示文件的大小。

Python字符串大小写转换的函数及用法

Python字符串由内建的str类代表,那么str 类包含哪些方法呢?Python 非常方便,它甚至不需要用户查询文档,Python 是“自带文档”的。 这里需要读者简单掌握两个帮助函数: dir():列出指定类或模块包含的全部…

深入解析 Python 中 Parsel 的两种数据提取方式

更多资料获取 📚 个人网站:ipengtao.com 在网络爬虫的世界中,数据提取是至关重要的一环。Python 提供了许多强大的工具,其中之一就是 parsel 库,专门用于解析和提取 HTML 或 XML 数据。本篇博客将深入探讨 parsel 中两…

8. 队列

队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列的尾部,而位于队列头部的人逐个离开。 如下图所示,我们将队列的头部称为“队首”,尾部称为“队尾”&#xff…

聚硫醇固化剂Capure3-800含巯基-SH环氧固化剂TDS说明书

聚硫醇固化剂Capure3-800含巯基-SH环氧固化剂TDS说明书

【程序员的自我修养03】深入了解ELF文件格式

绪论 大家好,欢迎来到【程序员的自我修养】专栏。正如其专栏名,本专栏主要分享学习《程序员的自我修养——链接、装载与库》的知识点以及结合自己的工作经验以及思考。编译原理相关知识本身就比较有难度,我会尽自己最大的努力,争取…

Python 异常处理(try except)

文章目录 1 概述1.1 异常示例 2 异常处理2.1 捕获异常 try except2.2 抛出异常 raise 3 异常类型3.1 内置异常3.2 自定义异常 1 概述 1.1 异常示例 异常:程序执行中出现错误,若不处理,则程序终止 示例代码: v 6 / 0 # 除数不…

滴水逆向三期笔记与作业——02C语言——07 多维数组

OneNote防丢 多维数组 一、二维数组的初始化1.1 二维数组初始化1.2 给定部分值1.3 二维数组省略第二层的{}1.4 省略长度1.5 多维数组寻址1.6 作业 一、二维数组的初始化 1.1 二维数组初始化 代码1 int arr[3][4] { {1,2,3,4}, {5,6,7,8}, {9,7,6,5} }; 代码2 int arr[3*4…

科普:什么是合同生命周期管理?

在当前,企业面临自身转型升级与行业数字建设的挑战,急需一种系统化的解决方案,帮助企业在自身运作方面实现降本增效,为拓展业务获得发展提供助力,而合同生命周期管理在其中就扮演着十分重要的角色。 一、合同生命周期…

超详细!Opencv人脸识别!附源码!

一、新建环境 注意!!确定后需要关闭项目,重新打开,终端的环境才会变化!! 二、下载安装包(只需要3个即可) 1. 下载dlib包 pip install dlib-19.19.0-cp38-cp38-win_amd64.whl.whl …

数据结构学习笔记——二叉树的遍历和链式存储代码实现二叉树

目录 一、二叉树的遍历(一)二叉树的先序遍历(DLR)(二)二叉树的中序遍历(LDR)(三)二叉树的后序遍历(LRD)(四)二…

修复电脑中缺失的VCRUNTIME140.dll文件的5个有效方法

vcruntime140.dll丢失5个修复方法与vcruntime140.dll是什么以及丢失对电脑的影响 引言: 在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是“vcruntime140.dll丢失”。那么,什么是vcruntime140.dll?它…

虚幻学习笔记1—给UI添加动画

一、前言 本文所使用的虚幻版本为5.3.2,之前工作都是用unity,做这类效果用的最多的是一个DoTween的插件,在虚幻中都内置集成了这这种效果制作。 图1.1 UI动画 二、过程 1、首先,在诸如按钮、图像等可交互控件中选中,如…

【驱动】串口驱动分析(四)-串口编程和调试方法

串口调试 串口调试主要有 根据/proc系统信息确认串口状态,stty命令,编程调试 三种调试方法,下面我们分别具体介绍下。 根据设备节点确认串口是否正常 系统上电时,默认会使能串口,我们可以通过dmesg | grep ttyS 查看…

2023 年 IntelliJ IDEA下载、安装教程,附详细图文

大家好,今天为大家带来的是 2023年 IntelliJ IDEA 下载、安装教程,超详细的图文教程,亲测可用。 文章目录 1 IDEA 下载2 IDEA 安装3 IDEA 使用4 快捷键新手必须掌握:Ctrl:Alt:Shift:Ctrl Alt&a…

mysql:免费的GUI客户端工具推荐并介绍常用的操作

给大家推荐几个常用的 mysql 数据库客户端 sequel-pro sequel-ace 官网下载地址 免费 sequel-ace 可以理解为 Sequel Pro 的升级版,由于Sequel Pro官方不维护了,特别是对 MySQL 8.0 支持不好,所以现在由社区维护了新分支 sequel-ace&#x…

中兴亮相中国国际现代化铁路技术装备展览会 筑智铁路5G同行

近日,第十六届中国国际现代化铁路技术装备展览会在北京中国国际展览中心举办,中兴以“数智铁路,5G同行”主题亮相本次展览会,并全面展示了“数字铁路网络基础设施”、“云边结合的铁路行业云”、“数字铁路赋能赋智”等方面的最新…

[蓝桥杯习题]———位运算、判断二进制1个数

⭐Hello!这里是欧_aita的博客。 ⭐今日语录:行动胜过一切。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法(内含蓝桥杯习题) MySQL数据库 位运算 位运算位运算的定义简单运用 实战刷题题目思路代码实现声…

第十八章,Swing窗体

概述 String包的层次结构和继承关系如下 常用的Swing组件如下表 Swing常用窗体 JFrame 窗体 JFrame 类的常用构造方法包括以下两种形式: public JFrame():创建一个初始不可见、没有标题的窗体。 public JFrame(String title)&a…