【前端学java】JDBC快速入门

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【8月更文挑战第12天】JDBC快速入门

什么是JDBC

JDBC( Java DataBase Connectivity)就是使用java操作数据库的一套API。JDBC是一套标准接口,使用JDBC,在不更改任何Java代码的情况下,可以操作Mysql数据库、Oracle数据库等。

JDBC开发流程简介

JDBC的开发流程很简单,实际就是通过Java代码将SQL语句发送给mysql,然后处理Mysql的返回结果。
其代码的编写步骤大致如下:

创建工程,导入驱动jar包

我们以IDEA2022版本为例,演示下如何创建项目,引入jar包
首先,新建项目,选择合适的JDK版本(我们以1.8为例)
image.png
项目创建好后,创建lib文件夹,文件夹下放mysql的驱动包mysql-connector-java-5.1.48.jar,然后右键驱动包,选择【Add library】添加为库文件,添加为库文件时,level选择Module Library(模块有效)
GIF 2023-7-27 9-40-31.gif
最后,我们在src下创建一个JDBC类即可
本示例外层增加了Jdbc_Demo文件夹,起名时,在类名可以加 文件夹名. 项目创建出来就会自动带文件夹名
image.png

代码实现

package jdbc_DEMO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/*
* JDBC快速入门
* */
public class JDBC {
   
   
    public static void main(String[] args) throws Exception{
   
   
        // 1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2.获取连接
        String url = "jdbc:mysql://127.0.0.1:3306/datebase";
        String userName = "root";
        String password = "root";
        Connection conn = DriverManager.getConnection(url,userName,password);
        // 3.定义sql
        String sql = "INSERT INTO t_user (id,user_name,state,user_id) VALUES (2,'dqwdqwdqwd',5,'9527');";
        // 4.获取执行sql的对象 Statement
        Statement stmt = conn.createStatement();
        // 5.执行sql
        int count = stmt.executeUpdate(sql); // 受影响的行数
        // 6.处理结果
        System.out.println(count);
        // 7.释放资源
        stmt.close();
        conn.close();
    }
}

代码详解

主类和方法

public class JDBC {
   
   
    public static void main(String[] args) throws Exception {
   
   
        // 数据库连接、SQL执行和资源清理的代码将在此处编写。
    }
}

注册JDBC驱动程序

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

在这部分代码中,注册了MySQL的JDBC驱动程序。这一步是为了让Java应用程序知道MySQL数据库驱动程序类。

注意,本示例为了便于演示,使用的是旧的方法来加载驱动程序类,java框架中已经不使用这种形式了。

建立数据库连接
Java代码需要发送SQL给MySQL服务端,就需要先建立连接,DriverManager的getConnection有三个参数,数据库地址、数据库用户名、数据库密码

Connection conn = DriverManager.getConnection(url, username,password);

定义SQL语句
这里根据需求自己设置

String sql = "INSERT INTO t_user (id,user_name,state,user_id) VALUES (2,'dqwdqwdqwd',5,'9527');";

创建Statement并执行SQL

Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);

代码使用Connection类的createStatement()方法创建了一个Statement对象。然后,使用Statement类的executeUpdate()方法执行SQL INSERT语句。此方法通常用于数据操作查询,如INSERT、UPDATE、DELETE等。方法返回受SQL语句影响的行数,并将其存储在变量count中。
处理结果

System.out.println(count);

代码打印count的值,即SQL INSERT语句所影响的行数(在本例中,即插入的行数)。
关闭资源

stmt.close();
conn.close();

最后,代码关闭StatementConnection对象,以释放数据库资源。

Api详解

DriverManager

DriverManager是一个驱动管理类,它的源码中有很多方法。
image.png

注册驱动

上述示例中,我们使用了它的registerDriver方法

// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");

getConnection方法

Connection conn = DriverManager.getConnection(url,userName,password);

但是,示例中的注册驱动方法似乎没有调用registerDriver,我们点开com.mysql.jdbc.Driver中的Driver看看源码
image.png
通过代码,我们可以看出,当Driver类被调用时,其内部的静态代码块就会执行,静态代码块中执行了DriverManager的registerDriver注册方法

DriverManager.registerDriver(new Driver());

重要提示:
MySql5之后的驱动包,可以直接省略注册驱动的步骤。(删除这句代码也不会报错)。java会自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类image.png

数据库连接

数据库连接需要我们本地安装有mysql,本示例中本地数据库如下:
image.png
本地mysql地址是127.0.0.1:3306,有一个datebase数据库,数据库里有一个tuser表
Api
image.png
url :连接路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2… 示例:** jdbc:mysql://127.0.0.1:3306/datebase_ url的省略**
如果连接的是本机mysql服务器,且默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称

// 2.获取连接
String url = "jdbc:mysql:///datebase";

运行代码,可以发现控制台正常输出了结果
image.png
SSL报错禁用
观察上面的截图,我们会发现控制台有安全警告,这是数据库希望我们用ssl的安全连接方式。我们可以禁用这个告警

String url = "jdbc:mysql:///datebase?useSSL=false";

重新运行代码,可以发现报错就被解决了
image.png

配置 useSSL=false 参数,禁用安全连接方式,解决警告提示

Connection

Connection用于数据库连接,我们先看看其官方Api文档
image.png
它主要有两个作用:

  • 获取执行SQL的对象
  • 管理事务

    获取执行SQL的对象

    createStatement

    普通执行sql对象
    image.png
    我们的示例代码中,采用了createStatement获取了sql执行对象Statement

    // 4.获取执行sql的对象 Statement
    Statement stmt = conn.createStatement();
    

    需要注意的是,本示例中这种方式是不安全的,也不是实际项目开发中使用的。实际上,现在都使用perpareStatement获取sql执行对象。

    perpareStatement

    PreparedStatement对象允许数据库预编译SQL语句,它的安全性和效率都远高于Statement。鉴于篇幅问题,本文章不会展开讲解。

    事务管理

    DBC的事务管理是指在执行数据库操作时,通过启用事务来确保一组操作要么全部成功执行,要么全部回滚(撤销),从而保持数据库的一致性和完整性。
    篇幅问题,本文不展开讲解。

    Statement

    Statement是用来执行sql语句的,mysql中有三种sql语句类型。

  • DDL:对表和库的增删改查操作

  • DML:对数据的增删改操作
  • DQL:对数据的查询操作

Statement 实例对象主要两个方法,executeUpdateexecuteQuery

executeUpdate

executeUpdate可以执行DML、DDL语句,其返回值是sql语句影响的行数。
执行DML:
如果我们的数据表有一条数据
image.png

// 3.定义sql
String sql = "UPDATE t_user set name = 'shixiaoshi' where id = 1";
// 4.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
// 5.执行sql
int count = stmt.executeUpdate(sql); // 受影响的行数
// 6.处理结果
if(count > 0){
   
   
    System.out.println("数据库操作成功");
}else {
   
   
    System.out.println("数据库操作失败");
}

执行上面的代码,sql语句会更改数据表中id为1的这条数据,因此,executeUpdate的值为1。如果执行下面的sql语句,因为没有id=2这一项,因此数据库就会操作失败,返回的结果就是0。

String sql = "UPDATE t_user set name = 'shixiaoshi' where id = 2";

执行DDL

  • 增加一个数据库

我们的服务端目前有5个数据库
image.png
我们更改sql语句创建一个数据库

// 3.定义sql
String sql = "create database newDb";

执行代码,可以看到服务端增加了一个数据库newDbimage.png

  • 删除一个数据库
    // 3.定义sql
    String sql = "drop database newDb";
    

    注意,刪除数据库即使成功,返回值也是0
    image.png

executeQuery

Statement的executeQuery方法用于查询数据数据表的结果。它是类型是 ResultSet。
我们简单展示下代码

package jdbc_DEMO;
import java.sql.*;

/*
* JDBC快速入门
* */
public class JDBC {
   
   
    public static void main(String[] args) throws Exception{
   
   
        // 1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2.获取连接
        String url = "jdbc:mysql:///datebase?useSSL=false";
        String userName = "root";
        String password = "root";
        Connection conn = DriverManager.getConnection(url,userName,password);
        // 3.定义sql  查询数据
        String sql = "select * from t_user";
        // 4.获取执行sql的对象 Statement
        Statement stmt = conn.createStatement();
        // 5.执行sql
        ResultSet rs = stmt.executeQuery(sql); // 受影响的行数
        // 6.处理结果
        System.out.println("--------------------"+ rs);
        // 7.释放资源
        rs.close();
        stmt.close();
        conn.close();
    }
}

需要注意的是,executeQuery返回的rs对象在代码结束后也需要释放rs.close()

我们观察下输出结果
image.png
可以看到,rs并不是我们能直接识别的数据,它需要通过ResultSet的一些方法解析才能成为我们所熟知的数据。

相关实践学习
如何在云端创建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
|
17天前
|
SQL Java 数据库连接
如何在 Java 脚本中有效地使用 JDBC
如何在 Java 脚本中有效地使用 JDBC
14 0
|
2月前
|
设计模式 前端开发 Java
【前端学java】SpringBootWeb极速入门-分层解耦(03)
【8月更文挑战第13天】SpringBootWeb极速入门-分层解耦(03)
19 2
【前端学java】SpringBootWeb极速入门-分层解耦(03)
|
2月前
|
开发框架 前端开发 Java
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
【8月更文挑战第12天】SpringBootWeb极速入门-实现一个简单的web页面01
59 3
【前端学java】SpringBootWeb极速入门-实现一个简单的web页面01
|
2月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
49 2
【前端学java】如何从前端视角快速学习Maven
|
2月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
81 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
2月前
|
JSON 前端开发 Java
【前端学java】SpringBootWeb极速入门-请求参数解析(02)
【8月更文挑战第12天】SpringBootWeb极速入门-请求参数解析(02)
19 1
【前端学java】SpringBootWeb极速入门-请求参数解析(02)
|
2月前
|
SQL Java 关系型数据库
探索Java数据库连接的奥秘:JDBC技术全攻略
探索Java数据库连接的奥秘:JDBC技术全攻略
52 8