阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

第一个JDBC程序

380次阅读
没有评论

共计 4702 个字符,预计需要花费 12 分钟才能阅读完成。

一、准备驱动

准备 mysql 数据库的驱动 jar 包:mysql-connector-java-5.1.13-bin.jar;

二、获取连接

​ 获取连接需要两步:

​ 一是使用 DriverManager 来 注册驱动

​ 二是使用 DriverManager 来 获取 Connection 对象 连接对象)。

注册驱动

看清楚了,注册驱动就只有一句话:Class.forName(“com.mysql.jdbc.Driver”),下面的内容都是对这句代码的解释。今后我们的代码中,与注册驱动相关的代码只有这一句。

DriverManager 类的 registerDriver()方法的参数是 java.sql.Driver,但 java.sql.Driver 是一个接口,实现类由 mysql 驱动来提供,mysql 驱动中的 java.sql.Driver 接口的实现类为 com.mysql.jdbc.Driver!那么注册驱动的代码如下:

​ DriverManager.registerDriver(new com.mysql.jdbc.Driver());

上面代码虽然可以注册驱动,但是出现硬编码(代码依赖 mysql 驱动 jar 包),如果将来想连接 Oracle 数据库,那么必须要修改代码的。并且其实这种注册驱动的方式是注册了两次驱动!

JDBC 中规定,驱动类在被加载时,需要自己“主动”把自己注册到 DriverManger 中,下面我们来看看 com.mysql.jdbc.Driver 类的源代码:

com.mysql.jdbc.Driver.java

public class Driver extends NonRegisteringDriver implements java.sql.Driver {static {try {java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) {throw new RuntimeException("Can't register driver!"); } } …… }

com.mysql.jdbc.Driver 类中的 static 块会创建本类对象,并注册到 DriverManager 中。这说明只要去加载 com.mysql.jdbc.Driver 类,那么就会执行这个 static 块,从而也就会把 com.mysql.jdbc.Driver 注册到 DriverManager 中,所以可以把 注册驱动类 的代码修改为 加载驱动类

Class.forName(“com.mysql.jdbc.Driver”);

获取连接

获取连接的也只有一句代码:DriverManager.getConnection(url,username,password),其中 username 和 password 是登录数据库的用户名和密码,如果我没说错的话,你的 mysql 数据库的用户名和密码分别是:root、123。

url相对复杂一点,它是用来找到要连接数据库“网址”,就好比你要浏览器中查找百度时,也需要提供一个 url。下面是 mysql 的 url:

jdbc:mysql://localhost:3306/mydb1

JDBC 规定url 的格式由三部分组成,每个部分中间使用逗号分隔。

​ 第一部分是 jdbc,这是固定的;

​ 第二部分是数据库名称,那么连接 mysql 数据库,第二部分当然是 mysql 了;

​ 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql 的第三部分分别由 数据库服务器的 IP 地址 (localhost)、 端口号(3306),以及 **DATABASE 名称(mydb1)** 组成。

下面是获取连接的语句:

Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb1”,”root”,”123”);

还可以在 url 中提供参数:

jdbc:mysql://localhost:3306/mydb1**?useUnicode=true&characterEncoding=UTF8**

useUnicode 参数指定这个连接数据库的过程中,使用的字节集是 Unicode 字节集;

characherEncoding 参数指定连接数据库的过程中,使用的字节集编码为 UTF- 8 编码。请注意,mysql 中指定 UTF- 8 编码是给出的是 UTF8,而不是 UTF-8。要小心了!

三、获取 Statement

在得到 Connectoin 之后,说明已经与数据库连接上了,下面是通过 Connection 获取 Statement 对象的代码:

Statement stmt = con.createStatement();

Statement 是用来向数据库发送要执行的 SQL 语句的!

四、发送 SQL 增、删、改语句

定义 sql 语句

String sql =“insert into user value(’zhangSan’,’123’)”;

执行增删改的方法:executeUpdate(String sql)

int m = stmt.executeUpdate(sql);

其中 int 类型的返回值表示执行这条 SQL 语句所影响的行数,我们知道,对 insert 来说,最后只能影响一行,而 update 和 delete 可能会影响 0~n 行。

如果 SQL 语句执行失败,那么 executeUpdate()会抛出一个 SQLException。

五、发送 SQL 查询语句

定义 sql 语句

String sql =“select * from user”;

执行查询语句

ResultSet rs = stmt.executeQuery(sql);

请注册,执行查询使用的不是 executeUpdate()方法,而是 executeQuery()方法。executeQuery()方法返回的是 ResultSet,ResultSet 封装了查询结果,我们称之为结果集。

六、读取结果集中的数据

ResultSet 就是一张二维的表格,它内部有一个“行光标”,光标默认的位置在“第一行上方”,我们可以调用 rs 对象的 next()方法把“行光标”向下移动一行,当第一次调用 next()方法时,“行光标”就到了第一行记录的位置,这时就可以使用 ResultSet 提供的 getXXX(int col)方法来获取指定列的数据了:

rs.next();// 光标移动到第一行

rs.getInt(1);// 获取第一行第一列的数据

当你使用 rs.getInt(1)方法时,你必须可以肯定第 1 列的数据类型就是 int 类型,如果你不能肯定,那么最好使用 rs.getObject(1)。在 ResultSet 类中提供了一系列的 getXXX()方法,比较常用的方法有:

Object getObject(int col)

String getString(int col)

int getInt(int col)

double getDouble(int col)

七、关闭

与 IO 流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。

rs.close();

stmt.close();

con.close();

八、代码实现

获取连接的方法

public static Connection getConnection() throws Exception {Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydb1"; return DriverManager.getConnection(url, "root", "poi"); }

执行插入的方法

@Test public static void insert() throws Exception {Connection con = getConnection(); Statement stmt = con.createStatement(); String sql = "insert into user values('zhangSan','123')"; stmt.executeUpdate(sql); System.out.println("插入成功!"); }

执行更新的方法

@Test public static void update() throws Exception {Connection con = getConnection(); Statement stmt = con.createStatement(); String sql = "update user set password='456'where username='zhangSan'"; stmt.executeUpdate(sql); System.out.println("修改成功!"); }

执行删除的方法

@Test public static void delete() throws Exception {Connection con = getConnection(); Statement stmt = con.createStatement(); String sql = "delete from user where username='zhangSan'"; stmt.executeUpdate(sql); System.out.println("删除成功!"); }

执行查询的方法

@Test public static void query() throws Exception {Connection con = getConnection(); Statement stmt = con.createStatement(); String sql = "select * from user"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()) {String username = rs.getString(1); String password = rs.getString(2); System.out.println(username + "," + password); } }

九、规范化代码

所谓规范化代码就是无论是否出现异常,都要关闭 ResultSet、Statement,以及 Connection,如果你还记得 IO 流的规范化代码,那么下面的代码你就明白什么意思了。

@Test public void query() {Connection con = null; Statement stmt = null; ResultSet rs = null; try {con = getConnection(); stmt = con.createStatement(); String sql = "select * from user"; rs = stmt.executeQuery(sql); while(rs.next()) {String username = rs.getString(1); String password = rs.getString(2); System.out.println(username + "," + password); } } catch(Exception e) {throw new RuntimeException(e); } finally {try {if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(con != null) con.close();} catch(SQLException e) {//throw new RuntimeException(e); e.printStackTrace();} } }

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计4702字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7818895
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器 在多台服务器同时运行的环境中,性能监控、状态告警、资源可视化 是运维人...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...