Java通过 JDBC 连接数据库操作

  • 1. 程序是怎么操作数据库的?
  • 2. 什么是JDBC
    • JDBC 工作原理
  • 3. JDBC 使用
    • 3.1 创建项目并添加 MySQL 驱动
    • 3.2 使用代码操作数据库
      • 3.2.1 获得数据源
      • 3.2.2 获得连接
      • 3.2.3 获得执行器
      • 3.3.4 查询或操作数据库
      • 3.3.5 关闭数据库连接
  • 首先,我们想要操作一个数据库服务器,需要有一个数据库客户端,以 MySQL 数据库为引例,最直接的数据库客户端它自己驱动窗口的 ① 命令行工具
  • 一般我们还可以配置出一些 ② 带界面的GUI客户端
  • 那么如果通过 ③ 编程语言作为客户端 连接到远程的服务器这个想法,解决了什么问题呢?

1. 程序是怎么操作数据库的?

使⽤程序之所以能操作数据库,主要是因为数据库厂商提供了操作的 API,也就是数据库驱动,也可以理解为面向接口编程,驱使数据库⾏动起来,就是数据库驱动,不光是程序,像我们之所以能通过命令行操作 MySQL,也是因为 MySQL 的数据库驱动,对于操作界⾯来说,数据库驱动就是下面这样一个窗口:

输⼊的命令就是 MySQL 数据驱动的⼀部分。我们可以直接通过这个窗口对数据库进行操作,它内部配置着最合适的驱动。那么为什么还要提出编程语言作为客户端这样的操作方式呢

2. 什么是JDBC

在了解 JDBC 概念之前,我们先来想⼏个问题:

  • 不同数据库⼚商的数据库驱动⼀样吗?
  • 不同数据库⼚商的 API 调⽤⼀样吗?
  • 使⽤ Java 程序只操作 MySQL 吗?还是有可能操作 Oracle、Sql Server、DB2 等数据库?

以上的答案都是否定的,也就是说不同厂商提供了不同的数据库驱动,提供了不同的 API 接口,我们试想一个场景,一家公司在起初进行数据存储的时候,使用的是免费开源的MySQL作为数据库进行存储的,在后来的发展中,业务越来越庞大,此时想要更换一个数据库,换成用Oracle来继续存储,那么由于这两种数据库他们的驱动是不兼容的,不能够共用一套代码程序来操作,那么此时更换就十分的麻烦了。

而 JDBC 就是解决这个问题的,它为 Java 开发人员操作数据库提供了⼀个标准的 API,可以为多种关系数据库提供统一访问

简单来说,使⽤了 JDBC 之后,不管是什么数据库与什么数据库驱动,我们只需要使用一套标准代码就可以实现对不同数据库进行统一操作(添加、修改、删除、查询),也就解决了我们上⾯说的那些问题了。

JDBC 工作原理

JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问 API 的⼀种⾼级抽象, 它主要包含⼀些通⽤的接⼝类。
JDBC 访问数据库层次结构:

架包:

JDBC 优势:

  • Java 语⾔访问数据库操作完全⾯向抽象接口编程。
  • 开发数据库应用不用限定在特定数据库⼚商的 API。
  • 程序的可移植性大大增强。

3. JDBC 使用

3.1 创建项目并添加 MySQL 驱动

创建⼀个 Java 项⽬,并添加 MySQL 驱动(mysql-connector-java-5.1.47.jar),需要注意不同数据 库版本要对应相应的驱动包。
操作步骤:点击项⽬属性 -> Modules -> Dependencies -> 点击“+”号 -> 1.Jars or directories -> 选择驱动包 -> 点击 OK 确认。

然后就有啦

3.2 使用代码操作数据库

操作数据库 MySQL 提供了两种操作 API:

  • DriverManager
  • DataSource(推荐使⽤,OOP 编码的思想和代码模式)

接下来咱们使⽤ DataSource 来实现操作数据库。 使⽤代码操作数据库分为以下 5 个步骤:

  1. 获取数据源(准备工作,相当于使用mysql客户端并输入了密码)
  2. 获取连接(输入了正确的密码,并且进入到了MySQL操作的界面)
  3. 获取执⾏器(连接到服务器并切换到数据库)
  4. 组装SQL并调用执行的API(相当于在mysql客户端输入了aql命令,并执行了回车操作)
  5. 关闭资源(关闭mysql客户端)

3.2.1 获得数据源

数据源是 MysqlDataSource,获取⽅式如下,需要输⼊数据库连接的 MySQL 服务器地址、⽤户名和密 码:

// 1.创建数据源
MysqlDataSource dataSource = new MysqlDataSource();
// 1.1 设置连接的 MySQL 服务器
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
// 1.2 设置⽤户名
dataSource.setUser("root");
// 1.3 设置密码
dataSource.setPassword("root");

3.2.2 获得连接

连接对象是 Connection,注意此步骤操作容易出错,⼀定是 com.mysql.jdbc 包下的 Connection 对象:

// 2.得到连接 Connection
Connection connection = (Connection) dataSource.getConnection();

3.2.3 获得执行器

执⾏器是⽤来执⾏ SQL 命令的,执⾏器有三种:

  • Statement
  • PreparedStatement
  • CallableStatement

    实际开发中最常⽤的是 PreparedStatement 对象。

实现:

// 3.获得执⾏器
PreparedStatement statement = connection.prepareStatement("select * from student where username=?");
// 3.1 占位符赋值
statement.setString(1, "王五");

3.3.4 查询或操作数据库

查询数据库使⽤ PreparedStatement.executeQuery ⽅法,返回⼀个 ResultSet 对象,具体实现代码 如下:

// 4.获得结果集
ResultSet resultSet = statement.executeQuery();
// 4.1 获得结果并打印
while (resultSet.next()) {String sn = resultSet.getString("sn");String username = resultSet.getString("username");String mail = resultSet.getString("mail");System.out.println(String.format("SN:%s,UserName:%s,Mail:%s", sn,
username, mail));
}

ResultSet 对象它被称为结果集,它代表符合 SQL 语句条件的所有⾏,并且它通过⼀套 getXXX ⽅法提供了对这些行中数据的访问。
ResultSet ⾥的数据⼀⾏⼀⾏排列,每⾏有多个字段,并且有⼀个记录指针,指针所指的数据⾏ 叫做当前数据⾏,我们只能来操作当前的数据⾏。我们如果想要取得某⼀条记录,就要使⽤ ResultSet 的 next() ⽅法 ,如果我们想要得到 ResultSet ⾥的所有记录,就应该使⽤ while 循环。

3.3.5 关闭数据库连接

关闭数据库连接是为了不浪费 MySQL 服务器端的资源,最终实现代码:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class App {public static void main(String[] args) throws SQLException,SQLException {// 1.创建数据源MysqlDataSource dataSource = new MysqlDataSource();// 1.1 设置连接的 MySQL 服务器dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java characterEncoding=utf8&useSSL=false");// 1.2 设置⽤户名dataSource.setUser("root");// 1.3 设置密码dataSource.setPassword("root");// 2.创建连接Connection connection = (Connection) dataSource.getConnection();// 3.获得执⾏器PreparedStatement statement = connection.prepareStatement("select
* from student where username=?");// 3.1 占位符赋值statement.setString(1, "王五");// 4.获得结果集ResultSet resultSet = statement.executeQuery();// 4.1 获得结果并打印while (resultSet.next()) {String sn = resultSet.getString("sn");String username = resultSet.getString("username");String mail = resultSet.getString("mail");System.out.println(String.format("SN:%s,UserName:%s,Mail:
%s", sn, username, mail));}// 5. 关闭资源resultSet.close();connection.close();}
}

Java通过 JDBC 连接数据库操作相关推荐

  1. JAVA JDBC连接数据库操作的基本步骤

    JAVA中JDBC连接数据库操作的基本步骤.注:假定连接数据库的用户名为root,密码为root. 步骤一: 定义连接数据库的相关信息 步骤一: 定义连接数据库的相关信息(1) 连接数据库的驱动:8. ...

  2. Java中JDBC连接数据库详解

    今天动力节点java学院小编分享的是JDBC连接数据库的相关知识,希望通过看过此文,各位小伙伴对DBC连接数据库有所了解,下面就跟随小编一起来看看JDBC连接数据库的知识吧. 一.JDBC连接数据库概 ...

  3. Java中JDBC连接数据库(MySQL)

     JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十一个功能都放 ...

  4. 小博老师解析Java核心技术 ——JDBC数据库操作类封装

    2019独角兽企业重金招聘Python工程师标准>>> [引言] 我们在学习Java编程时,连接数据库技术(JDBC)是一项必备技能,我们经常需要读取或操作持久性存储的结构化数据.那 ...

  5. Java使用JDBC用操作MySQL的基本实现

    写在前面 书接上回,上周写的博客还不错,感谢各位读者的支持. 在学完了MySQL的基础操作之后,接下来就该学习如何在业务层面去使用数据库了,一切的学习都是为了实际运用,所以就要开始学习JDBC了. 任 ...

  6. JAVA之JDBC连接数据库

    前景说明: 在我们刚开始使用数据库的时候,发现只能在mysql编辑器里面使用sql语句来完成对数据库的操作,那我们怎么来通过Java来操控数据库呢?这个时候就有了JDBC的出现. 1.什么是JDBC ...

  7. JAVA的JDBC连接数据库以及读取数据库数据

    一.下载数据库JDBC驱动 1.1:Mysql驱动 https://dev.mysql.com/downloads/connector/ 下载得到的是一个压缩包,解压后到里面寻找文件:mysql-co ...

  8. java用JDBC连接数据库的方式

    //驱动位置 String sDBDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //连接数据库地址名字 Stri ...

  9. 关于java用JDBC连接数据库的代码

    留下JDBC的代码以备后用 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSta ...

  10. Java配置jdbc连接数据库不限制ip设置方法(localhost/127.0.0.1/本机ip地址)

    jdbc配置连接数据库不限制ip设置方法(localhost/127.0.0.1/本机ip地址(配置)) 说明: 一般新安装的mysql数据库默认是不开启ip访问的 localhost/127.0.0 ...

最新文章

  1. SCUT个人整理的常见问题
  2. Linux基础(day59)
  3. JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点
  4. JavaScript 一维数组、二维数组(某个属性)去重方法
  5. c++ pair类型的基本问题
  6. php foreach 多出一个_PHP如何实现统计数据合并
  7. 【数据库】第五章 数据库的完整性(2020.4.15)联系第三章
  8. 侧滑菜单--狸菇凉_
  9. 动漫学日语《白熊咖啡厅》(更新中)
  10. javascript(String, Array, Math, Date, Object)方法整理
  11. linux键盘模拟程序,linux下模拟键盘的几种方法
  12. ACPI Spec Chapter 10 Power Source And Power Meter Devices
  13. 比较详细的Mencoder命令行使用
  14. C++ day24 继承(四)抽象基类,纯虚函数,protected
  15. 人类一败涂地做图教程_人类一败涂地怎么捏人?自定义人物PS制作教程
  16. 【Docker】docker安装elasticsearch集群,Kibana安装以及开启认证
  17. Python中int、str、bytes相互转化,还有2进制、16进制表示,你想要的都在这里了
  18. 练习八:利用有限状态机进行时序逻辑的设计
  19. c语言考试系统设计报告,C语言课程设计(单项选择题标准化考试系统)报告
  20. 计算机一级软件在U盘怎么安装到桌面,桌面软件拷贝到u盘教程

热门文章

  1. CCS 下载程序时报错的解决办法( TI C2000 TMS320F28379D)
  2. 在线考试系统设计+源码
  3. svn文件本地删除 服务器不删,svn delete-删除文件和目录命令大全
  4. Chrome中播放时视频编码为.h264和音频编码为acc,采样率为48000,双通道的视频文件时音画不同步
  5. Java面试之Java集合5——HashMap的底层实现
  6. 基于php的学校固定资产管理系统
  7. ulipad 常用快捷键
  8. 如何使textarea显示滚动条
  9. iis服务器显示目录,iis服务器目录
  10. NetSpeedMonitor