【MySQL系列】Java的JDBC编程
目录
??前言
??一、背景知识引入
??二、安装MySQL数据库驱动包,并且导入到项目中
??三、JDBC的使用
???3.1 JDBC插入数据操作
???3.2 JDBC修改数据操作
???3.3 JDBC删除数据操作
???3.4 JDBC查找数据操作
??后续
前言
在之前学习MySQL数据库的时候,也许有的同学在纠结于使用 命令行的方式,还是图形化界面的方式 来学习~~
其实,在日常开发过程中,主流使用方式其实是通过代码的形式来操作数据库~~
当然,无论是使用哪种方式,其核心知识都是 SQL~~
一、背景知识引入
MySQL是一个 客户端/服务器 结构的程序~
当然,不是所有的数据库都是这样的(SQLite就不是,Oracle、SQL Server是)~
像主流的数据库,为了方便程序员实现 客户端 程序,会提供一些 API接口,称为 “数据库SDK”,就可以借助这些 API接口,比较方便的访问数据库服务器~~
API,是计算机中一个相当广泛使用的术语,Application Programming Interface ,提供了一些 函数/方法/类,可以让程序员直接调用来完成一些功能~~
SDK,也是一个相当广泛使用的术语,Software Development Kit,软件开发工具包,提供了一些工具~~
比如说,张三同学有了一个女朋友,那么此时女朋友可以给张三提供一些API,如 日常拉拉小手,日常抱一抱…
就类似于,数据库服务器给我们提供了一些API,比如说 可以调用这个函数 连接到数据库;调用这个函数 执行一些SQL操作;调用这个函数 来关闭连接;调用这个函数,来创建一个事务;…
现在这里就引入了一个问题:
API 是数据库提供的,而不同的数据库,提供的 API 风格(里面的类名、方法名、参数/返回值 等都不同)可能不一样,那怎么办???
于是,Java 提出了一套 "标准"的接口体系(毕竟,也不会找数据库本身的)~~
让这些数据库厂商,提供的API都往 Java 的这套接口体系中进行适配~~
程序员只要去掌握 Java 的这一套 API 即可适应所有的主流数据库了~~
当然,其他大多数主流编程语言,也有类似的操作~~
主流数据库,都会有多语言支持~~
现在,咱们说的是 Java~~
而Java所提供的这套API,就叫做 JDBC~~
而各个数据库厂商,为了能够适配 JDBC,因此就需要写一些额外的程序 来完成这个工作,厂商提供的这套额外的程序,称为 “JDBC驱动包”~~
当我们使用Java操作MySQL的时候,就需要去安装MySQL的驱动包;
当我们使用Java操作各种数据库,就需要安装对应的 数据库所提供的驱动包,才能真正进行使用~~
JDBC 本质上就是 Java对于各种数据库差异性的封装~
目的就是为了简化程序员的学习使用成本~
二、安装MySQL数据库驱动包,并且导入到项目中
我们使用Java操作MySQL数据库的时候,肯定是要安装MySQL数据库驱动包的~~
现在,这里就来分享一下 如何在 “中央仓库” 下面下载一下MySQL数据库驱动包~~
搜索 “中央仓库” 网址:https://mvnrepository.com/
虽然这一步骤加载过程可能有点慢~~
下载好了以后,就会得到一个 .jar后缀的文件,叫做 jar 包 ~
本质上就是一个类似于 rar 的压缩包~
jar 包里面主要就是一些 .class文件~
像这样的压缩包,不需要我们手动解压缩,直接放到项目中即可~
JVM 在运行的时候能自动的读取压缩包里面的内容~
接下来我们就需要把准备好的 jar 包,放入到项目里面去~~
第一步,我们需要创建一个目录,并且把 jar 包拷贝到目录里面去:
第二步,设置这个目录,让这个目录能被项目识别:
三、JDBC的使用
3.1 JDBC插入数据操作
由于MySQL是一个服务器,要想和服务器之间进行通信,前提是需要和 服务器之间进行连接;
要想和服务器之间建立连接,前提是需要知道服务器所在的位置~~
第一个环节:
在JDBC里面,使用 DataSource 这个类来描述数据库的位置:
DataSource dataSource = new MysqlDataSource();--DataSource 是一个 interface,不能直接实例化~~ --而 MysqlDataSource 则是实现了 DataSource接口~~--实际上,这个操作,就是 "向上转型"~~
需要注意的是,这个类来自于驱动包,如果驱动包导入正确,才能够顺利的提示出来:
通过 DataSource 来确定服务器的位置~~
位置如何描述?
描述一个网络上的资源,常用手段 就是使用 URL(唯一资源定位符/网址)~~
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");--((MysqlDataSource)dataSource).setUrl(); --这是一个向下转型--其中,--jdbc:mysql 是协议名,即 这个网址是干啥用的(这个网址就是 jdbc 连 mysql用)--127.0.0.1 是IP地址(互联网上的主机的IP地址,是通过一串的数字的形式来描述的)--3306 是端口号(用于区别 当前主机上的哪个程序,MySQL服务器默认使用的端口号是 3306)--java 是数据库名,就是 create database 数据库名,访问的是MySQL数据库上面的哪一个数据库--characterEncoding=utf8&useSSL=false 是一些相关参数, --characterEncoding=utf8 是设置客户端连接服务器使用的字符集 --useSSL=false 固定设为false,表示不启用加密
像上述URL,大家不必去背!!!
背,容易背错!!!
写了一次之后,后续只要去复制粘贴即可!!!
同时,需要设置用户名以及密码:
//设置用户名 是固定的 root ((MysqlDataSource)dataSource).setUser("root");//设置密码 不是固定的,是自己的数据库密码 ((MysqlDataSource)dataSource).setPassword("111111");
以上操作,就可以准确的描述服务器的位置~~
网络通信中,有两种风格:
一种是 “有连接”,相当于 “打电话” (接通电话过后,才可进行聊天)
一种是 “无连接”,相当于 “发微信”(编辑信息后,爱看不看,信息都已经发过去了)
数据库这里的通信方式,采取的是有连接的方式~
优点:能够在通信之前,知道通信的链路是否通畅
缺点:连接需要进行管理,尤其是不用的连接要及时释放(想像 打完电话要挂断,否则扣你话费)~~
第二个环节:
和数据库服务器建立连接:
Connection connection = dataSource.getConnection();
啥时候会出现异常:和数据库服务连接失败~~
Alt + Enter,出现 解决方案~~
如果连接失败,失败的原因有很多,DataSource 这里填写的信息,有一点点的纰漏,就会导致连接失败~~
第三个环节:
构造SQL语句(JDBC操作数据库,本质仍然是通过 SQL 来描述数据库操作)~~例如,此时我们进行一个插入数据的操作:
首先我们需要一个表:
第四个环节:
执行SQL语句,
insert、update、delete都是通过executeUpdate来执行的,
select则是通过exexuteQuery来执行的~~
executeUpdate 的返回值是一个整数,表示这个操作影响到几行,
就类似于:
第五个环节:
断开连接,释放资源
释放顺序:后创建的先释放
运行结果:
如果在创建表的时候,设置了主键约束,
比如说,id设置成了主键,
那么 如上述情况的话,运行第二次就会报错:id唯一 存在主键约束~~
可是,这样的话,插入的数据就会写死了~~
而在实际操作过程中,这种写死的办法并不好~~
我们还需要用其他的办法来进行操作~~
此时,自己可输入数据:
附:
JDBC插入操作 源码:
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.SQLOutput; import java.util.Scanner;public class JDBCHello {public static void main(String[] args) throws SQLException {//1.使用 DataSource 来描述 MySQL服务器的位置DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306" +"/java?characterEncoding=utf8&useSSL=false");//设置用户名 是固定的 root((MysqlDataSource)dataSource).setUser("root");//设置密码 不是固定的,是自己的数据库密码((MysqlDataSource)dataSource).setPassword("111111");//2.和数据库服务器建立连接Connection connection = dataSource.getConnection();//System.out.println(connection);//3.构造SQL语句//例如,此时我们进行一个插入数据的操作Scanner scanner = new Scanner(System.in);System.out.println("请输入学号:");int num = scanner.nextInt();System.out.println("请输入姓名:");String name = scanner.next();String sql = "insert into student values(?,?)";//使用?作为占位符,后续使用statement 对象针对?进行替换~//直接用 String格式的SQL还不行,还需要搭配一个特殊的类 —— PreparedStatementPreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1,num);//第一个问号,代替成num,此处的下标,从1开始计数的statement.setString(2,name);//通过上面两个参数的替换,把第1个参数替换为 num,第2个参数替换为 nameSystem.out.println(statement);//4.执行 SQL语句int n = statement.executeUpdate();System.out.println("n = " + n);//5.断开连接,释放资源(后创建的先释放)statement.close();connection.close();} }
3.2 JDBC修改数据操作
实现数据库修改的操作,和插入操作非常类似~~
只是这里的 SQL语句 是 update语句~~
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner;public class JDBCUpdate {public static void main(String[] args) throws SQLException {//实现数据库的修改操作,和插入非常相似//只是这里构造的 SQL 语句是 update 语句//1.构造数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306" +"/java?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("111111");//2.和数据库建立连接Connection connection = dataSource.getConnection();//3.用户输入,要修改的id和输入后的名字Scanner scanner = new Scanner(System.in);System.out.println("请输入要修改的同学学号:");int id = scanner.nextInt();System.out.println("请输入要修改之后的同学姓名:");String name = scanner.next();//next 读到空白符(空格,制表符,换行符,回车符,垂直制表符......)//nextLine 读到换行符//4.构造SQL语句String sql = "update student set name = ? where id = ?";PreparedStatement statement = connection.prepareStatement(sql);statement.setString(1,name);statement.setInt(2,id);System.out.println(statement);//5.执行SQLint n = statement.executeUpdate();System.out.println("n = "+ n);//6.关闭连接、释放资源statement.close();connection.close();} }
3.3 JDBC删除数据操作
删除数据库中的数据,代码的写法和前面的增加/修改 是类似的~~
只是这里的 SQL语句是 delete语句~
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner;public class JDBCDelete {public static void main(String[] args) throws SQLException {//删除数据库中的数据,代码的写法和前面的增加/修改 是类似的//1.构造数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306" +"/java?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("111111");//2.和数据库建立连接Connection connection = dataSource.getConnection();//3.输入删除的内容Scanner scanner = new Scanner(System.in);System.out.println("请输入要删除的同学id:");int id = scanner.nextInt();//4.构造SQL语句String sql = "delete from student where id = ?";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1,id);System.out.println(statement);//5.执行SQLint n = statement.executeUpdate();System.out.println("n = "+ n);//6.关闭连接、释放资源statement.close();connection.close();} }
3.4 JDBC查找数据操作
查找数据库中的记录~~
这个查找操作就和前面的操作不太一样了~~
多了一个步骤 —— 要遍历结果集合~~
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;public class JDBCSelect {public static void main(String[] args) throws SQLException {//查找数据库中的记录~~//查找操作需要遍历结果集合,这是前面的几个操作不曾有的~~//因为客户端 后面拿到的是 "临时表",必须遍历一遍取出里面所需的东西 再显示在黑框框上~~//1.构造数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306" +"/java?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("111111");//2.和数据库建立连接Connection connection = dataSource.getConnection();//3.此处就不输入条件了,直接查找所有记录//4.构造SQLString sql = "select * from student";PreparedStatement statement = connection.prepareStatement(sql);//5.执行SQL//此处要使用的是 executeQuery//executeUpdate 只能返回一个int//executeQuery 返回的是一个 ResultSet对象,可以把这个对象视为一个 "临时表"~~ResultSet resultSet = statement.executeQuery();//6.遍历 "临时表"//resultSet 简单的当成一个类似于 "迭代器" 这样的东西来看待~~//next 如果没有到达末尾,就是返回true,要继续循环//next 如果到达了末尾,就返回false,结束循环while (resultSet.next()){//在这里就可以取这一行的数据了//通过 ResultSet 里面的 getXXX方法,来获取到这里指定的列//取id,id是整数,getIntint id =resultSet.getInt("id");//取name,name是字符串,getStringString name = resultSet.getString("name");System.out.println(id + ":" + name);}//7.关闭连接,释放资源resultSet.close();statement.close();connection.close();}}
关于JDBC整体的代码就是上述这样的~~
不难~~
但是比较繁琐~~
务必 掌握这里的核心概念(DataSource、Connection、PreparedStatement、ResultSet…),并且需要掌握核心流程~~
后续
实际在开发中,很少会直接使用JDBC~~
JDBC 写起来比较麻烦,比较啰嗦~~
后来衍生出了许多 “框架”,能够简化数据库操作~~
比如说,后面会介绍的 MyBatis框架~~
好啦~~
这就是MySQL数据库JDBC编程的内容啦~~
如果这篇博客给你带来了收获~~
可以留下一颗小小的赞吗~~
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
【MySQL系列】Java的JDBC编程相关推荐
- MySQL数据库 --- Java的JDBC编程
文章目录 Java的JDBC编程 1. 数据库编程的必备条件 2. MySQL驱动包的安装 3. idea 中 驱动包的部署 4. Java的数据库编程: JDBC 5. JDBC API 6. JD ...
- 引入MySQL驱动包进行JDBC编程
文章目录 1.什么是JDBC 2.创建JDBC项目的步骤-MySQL版本 1.什么是JDBC 每个数据库都会提供一组API来支持程序员实现自己客户端,自己根据需求来完成一些具体的增删查改的功能.但数据 ...
- Java - 数据库JDBC编程
本节目标 数据库驱动 JDBC的概念及作用 掌握JDBC的工作原理 掌握JDBC中几个常用接口和类 掌握基于数据库的应用程序开发流程 1.数据库编程的必备条件 编程语言,如Java,C.C++.Pyt ...
- Java的JDBC编程
文章目录 一.Java的数据库编程:JDBC 二.JDBC的作用及转换器--数据库驱动程序 三.JDBC编程的步骤 四.JDBC示例展示及具体步骤分析(重要) 1.使用JDBC插入数据 2.使用JDB ...
- java jdbc 连接mysql数据库,Java 通过JDBC连接Mysql数据库
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- JDBC编程——JDBC连接数据库六步骤
JDBC编程的6步骤 实现数据库连接之前,我们要先理解一下URL(统一资源定位器): 是跟数据库进行连接的时候,用来连接到指定远程数据库标识符. 可以在该URL中指定连接用户名和密码,同时,对于不同的 ...
- MySQL的JDBC编程(Java)
MySQL的JDBC编程(Java) 文章目录 MySQL的JDBC编程(Java) 1.创建项目 2.编写代码 1)**插入数据操作** 2)**删除操作** 3)**修改操作** 4)查询操作 1 ...
- Java系列技术之JDBC操作数据库-钟洪发-专题视频课程
Java系列技术之JDBC操作数据库-22人已学习 课程介绍 JDBC连接数据库是Java系列技术中数据库知识的核心技术,是学习后续课程JavaWeb入门前需要掌握的基础! 这门课的前 ...
- 【MySQL从小白到高手】第六篇:事务和MySQL中的JDBC编程
前言 目录 事务~ 什么是事务~ 事务的原子性~ 事务相关的面试题~ 脏读~ 不可重复读~ 幻读~ MySQL中事务的隔离级别~ MySQL中的JDBC编程~ JDBC~ 学习使用JDBC编程~ 引入 ...
最新文章
- mkdir、rmdir命令、head、tail命令
- 到底有多火?三家单位争抢发布,谷歌、清华、牛津同时提超越注意力的新机制...
- 那些容易忽略的事(1) -变量与运算符+
- Java并发ReadWriteLock接口
- 如果我的实验室也这样布置,那多好。
- 自动注入、加载 properties 文件、scope 属性、单例设计模式
- OpenShift 4 之集群是如何通过Cluster Version Operator升级的?
- 对AIOps智能化运维的基础理解
- 【白话模型量化系列一】矩阵乘法量化
- java中常用的数据结构_Java中常用的数据结构类
- CentOS 6.6下PXE+Kickstart无人值守安装操作系统
- hadoop发行版本之间的区别
- 大数据、数据分析、数据挖掘的差别
- python计算复合年化增长率、年化波动率与夏普比率
- Google Play安装应用一直在等待下载的解决方案
- edcoder数据结构第1关:基于BF算法的病毒感染监测
- InnoDB关键特性之插入缓冲
- Kali Linux 安装 Remmina 远程桌面并使用
- IDEA Tomcat 部署,找不到依赖包的问题,比如 ClassNotFound
- 矩阵的LDU分解简便方法
热门文章
- 随机信号处理AR模型Yule_Walker方程直接解法和Levinson_Durbin递推法的MATLAB与Python实现
- 安卓 linux找回内置存储,安卓手机坏了拆eMCP/EMMC闪存恢复数据教程
- 论文阅读:Fast Single Image Dehazing Using Saturation Based Transmission Map Estimation
- 针对U盘文件的盗与防攻略
- java程序设计题解与上机指导_Java程序设计习题解析与上机指导
- Map集合、Stream流、File类、递归
- Android qq消息气泡实现效果,BezierDemo源码解析-实现qq消息气泡拖拽消失的效果
- OpenStack 云平台流量监控插件tap-as-a-service(Taas)安装步骤(OpenStack queens版本,非devstack)
- 《遗传学与医学》学习笔记
- android v4 v7 v14,Android Support v4、v7、v13、v14、v17的区别和应用场景