【JavaWeb】之JDBC详细介绍(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【JavaWeb】之JDBC详细介绍(一)

前言


本文为JDBC相关介绍,Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~


一、数据库驱动简介


这里的驱动的概念和平时听到的那种驱动的概念一,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。

数据库驱动的运行原理如下图所示:


d9f9b9f35e70489a9ed1611ef8cde162.png


二、JDBC简介


SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。

JDBC的运行原理如下图所示:


b8d20d41ba12475e890b1c0d20c05d6a.png


JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成

组成JDBC的2个包:java.sql、javax.sql

开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)


三、编写JDBC程序


1.数据库环境搭建

CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE jdbc(
  id INT PRIMARY KEY,
  NAME VARCHAR(40),
  PASSWORD VARCHAR(40),
  email VARCHAR(60),
  birthday DATE
);
INSERT INTO users(id,name,password,email,birthday)
VALUES(1,'zhansan','123456','zs@sina.com','1980-12-04'),
(2,'lisi','123456','lisi@sina.com','1981-12-04'),
(3,'wangwu','123456','wangwu@sina.com','1979-12-04');

2.编写程序


以下是一个完整的JDBC程序,后边将对其中的DriverManager类,数据库URL,Connection类,Statement类,ResultSet类进行详细介绍。

package com.wang.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcFirstDemo {
  public static void main(String[] args) throws Exception {
    //要连接的数据库URL
    String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&useSSL=true";
    //连接的数据库时使用的用户名
    String username = "root";
    //连接的数据库时使用的密码
    String password = "123456";
    //1.加载驱动
    //DriverManager.registerDriver(new com.mysql.jdbc.Driver());不推荐使用这种方式来加载驱动
    Class.forName("com.mysql.jdbc.Driver");//推荐使用这种方式来加载驱动
    //2.获取与数据库的链接
    Connection conn = DriverManager.getConnection(url, username,password);
    //3.获取用于向数据库发送sql语句的statement
    Statement st = conn.createStatement();
    String sql = "select id,name,password,email,birthday from jdbc";
    //4.向数据库发sql,并获取代表结果集的resultset
    ResultSet rs = st.executeQuery(sql);
    //5.取出结果集的数据
    while(rs.next()){
      System.out.println("id=" + rs.getObject("id"));
      System.out.println("name=" + rs.getObject("name"));
      System.out.println("password=" + rs.getObject("password"));
      System.out.println("email=" + rs.getObject("email"));
      System.out.println("birthday=" + rs.getObject("birthday"));
       }
    //6.关闭链接,释放资源
    rs.close();
    st.close();
    conn.close();
 }
}


四、JDBC中对象说明


1.DriverManager类


Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:

DriverManager.registerDriver(new Driver())
DriverManager.getConnection(url, user, password)

注意: 在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:


查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。

程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。


推荐方式:

Class.forName("com.mysql.jdbc.Driver");

采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。


2.数据库URL


URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

0dbcd83a82dd4a8f81d739a6f34bd9bb.png


常用数据库URL地址的写法:


MySql写法:jdbc:mysql://localhost:3306/数据库

Oracle写法:jdbc:oracle:thin:@localhost:1521:数据库

SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库


3.Connection类


Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过Connection对象完成的,这个对象的常用方法:


createStatement():创建向数据库发送sql的statement对象。

prepareStatement(sql):创建向数据库发送预编译sql的PrepareSatement对象。

setAutoCommit(boolean autoCommit):设置事务是否自动提交。

commit() :在链接上提交事务。

rollback() :在此链接上回滚事务。


4.Statement类


Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:


executeQuery(String sql) :用于向数据发送查询语句。

executeUpdate(String sql):用于向数据库发送insert、update或delete语句。

execute(String sql):用于向数据库发送任意sql语句。

addBatch(String sql) :把多条sql语句放到一个批处理中。

executeBatch():向数据库发送一批sql语句执行。


5.ResultSet类


Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。


ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:


获取任意类型的数据:getObject()

获取指定类型的数据,例如:getString(),getInt(),getFloat(),getDate()…

ResultSet还提供了对结果集进行遍历的方法:


next():移动到下一行

Previous():移动到前一行

absolute(int row):移动到指定行

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。


6.释放资源


Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象,特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。


为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
42 8
|
2月前
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
35 7
|
2月前
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
36 3
|
18天前
|
SQL Java 数据库连接
如何在 Java 脚本中有效地使用 JDBC
如何在 Java 脚本中有效地使用 JDBC
14 0
|
2月前
|
SQL Java 关系型数据库
【前端学java】JDBC快速入门
【8月更文挑战第12天】JDBC快速入门
28 2
【前端学java】JDBC快速入门
|
2月前
|
SQL Java 关系型数据库
探索Java数据库连接的奥秘:JDBC技术全攻略
探索Java数据库连接的奥秘:JDBC技术全攻略
52 8
|
2月前
|
SQL Java 数据库连接
JDBC之旅:从陌生到熟悉的Java数据库连接之路
JDBC之旅:从陌生到熟悉的Java数据库连接之路
25 8
|
2月前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
29 7
|
2月前
|
SQL 安全 Java
JDBC:Java与数据库的“月老红线”,你真的了解它吗?
JDBC:Java与数据库的“月老红线”,你真的了解它吗?
19 1
|
2月前
|
SQL Java 数据库连接
深入剖析JDBC:Java与数据库沟通的“桥梁”与“秘密”
深入剖析JDBC:Java与数据库沟通的“桥梁”与“秘密”
21 0