【前端学java】JDBC快速入门

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【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的一些方法解析才能成为我们所熟知的数据。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
Java
Java快速入门之判断与循环
本文介绍了编程中的流程控制语句,主要包括顺序结构、判断结构(if语句和switch语句)以及循环结构(for、while和do...while)。通过这些语句可以精确控制程序的执行流程。if语句有三种格式,分别用于简单条件判断、二选一判断和多条件判断。switch语句适用于有限个离散值的选择判断,而循环结构则用于重复执行某段代码,其中for循环适合已知次数的情况,while循环适合未知次数但有明确结束条件的情况,do...while则是先执行后判断。文中还提供了多个示例和练习,帮助读者理解并掌握这些重要的编程概念。
|
17天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
13天前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
15天前
|
SQL Java 关系型数据库
使用 JDBC 实现 Java 数据库操作
JDBC(Java Database Connectivity)是 Java 提供的数据库访问技术,允许通过 SQL 语句与数据库交互。本文详细介绍了 JDBC 的使用方法,包括环境准备、编程步骤和完整示例。
75 7
|
15天前
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
36 5
|
2月前
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
237 31
|
6月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
60 8
|
6月前
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
46 7
|
6月前
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
54 3
|
4月前
|
SQL Java 数据库连接
如何在 Java 脚本中有效地使用 JDBC
如何在 Java 脚本中有效地使用 JDBC
26 0

热门文章

最新文章