MySQL之JDBC

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

作者: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发送给服务器 执行sqlint 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.hqwc.cn/news/234947.html

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

相关文章

FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「内网穿透」

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

Unity 注释的方法

1、单行注释:使用双斜线(//)开始注释,后面跟注释内容。通常注释一个属性或者方法,如: //速度 public float Speed;//打印输出 private void DoSomething() {Debug.Log("运行了我"); } …

【C++】异常处理 ③ ( 栈解旋 | 栈解旋概念 | 栈解旋作用 )

文章目录 一、栈解旋1、栈解旋引入2、栈解旋概念3、栈解旋作用 二、代码示例 - 栈解旋1、代码示例2、执行结果 一、栈解旋 1、栈解旋引入 C 程序 抛出异常后 对 局部变量的处理 : 当 C 应用程序 在 运行过程 中发生异常时 , 程序会跳转到异常处理程序 , 并执行一些操作以处理异…

距离向量路由协议——RIP

目录 动态路由动态路由简介为什么需要动态路由动态路由基本原理路由协议的分类 距离向量路由协议RIPv1RIP简介RIPv1的主要特征RIPv1的基本配置RIPv1配置案例被动接口单播更新使用子网地址 RIPv2RIPv2的基本配置RIPv2配置案例 RIPv2的高级配置与RIPv1的兼容性手工路由汇总触发更…

【C++】string模拟

string讲解&#xff1a;【C】String类-CSDN博客 基本框架 #pragma once #include <iostream> using namespace std; ​ namespace wzf {class string{public:// 默认构造函数string(): _str(new char[1]), _size(0), _capacity(0){_str[0] \0; // 在没有内容时仍要有终…

python中的序列

文章目录 序列类型标准类型运算符标准类型运算符序列类型运算符字符串 序列类型 字符串 列表 元组 由元组构成的列表 标准类型运算符 &#xff08;1&#xff09;按字符串大小比较 标准类型运算符 序列类型运算符 序列类型转换内建函数 注&#xff1a; &#xff08;1&#xff…

基于SpringBoot房产销售系统

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…

frp 配置内网访问

frp介绍 frp 是一个开源、简洁易用、高性能的内网穿透软件&#xff0c;支持 tcp, udp, http, https 等协议。frp 项目官网是 https://github.com/fatedier/frp 下载地址&#xff1a; https://github.com/fatedier/frp/releases frp工作原理 服务端运行&#xff0c;监听一个…

AI Agents 闭门研讨会报名丨CAMEL、AutoAgents、Humanoid agents作者参与

青源Workshop丨No.27 AI Agents主题闭门研讨会 所谓AI智能体&#xff08;AI Agents&#xff09;&#xff0c;是一种能够感知环境、进行决策和执行动作的智能实体。它们拥有自主性和自适应性&#xff0c;可以依靠AI赋予的能力完成特定任务&#xff0c;并在此过程中不断对自我进行…

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

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

掌握Python BentoML:构建、部署和管理机器学习模型

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com BentoML是一个开源的Python框架&#xff0c;旨在简化机器学习模型的打包、部署和管理。本文将深入介绍BentoML的功能和用法&#xff0c;提供详细的示例代码和解释&#xff0c;帮助你更好地理解和应用这个强大的工…

JAVA 算法面试总结

1、二分查找 二分查找又叫折半查找&#xff0c;要求待查找的序列有序。每次取中间位置的值与待查关键字比较&#xff0c;如果中间位置 的值比待查关键字大&#xff0c;则在前半部分循环这个查找的过程&#xff0c;如果中间位置的值比待查关键字小&#xff0c; 则在后半部分循环…