JDBC(常用类与接口、实现数据库的增删查改)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 1.Connection接口常用方法、2.DriverMange类、3.Statement接口,4.实现表的数据更新(增、改、删),5.实现数据查找(ResultSet接口),6.PreparedStatement 数据更新

1.Connection接口常用方法

用来与数据库连接的对象,只有获得了特定的数据库对象才能对数据库进行操作

方法 描述
createStatement() 创建一个 Statement 对象,用于执行 SQL 语句。
createStatement(int resultSetType,int resultSetConcurrency) 根据给定的结果集类型和并发性创建一个 Statement 对象,用于执行 SQL 语句。
prepareStatement() 创建一个 PreparedStatement 对象,用于执行带有参数的 SQL 语句。
isReadOnly() 返回一个布尔值,指示数据库连接是否为只读模式。
setReadOnly() 设置数据库连接的只读模式,以指示是否允许修改数据库。
commit() 提交当前事务中所有挂起的更改。
rollback() 回滚当前事务中的所有挂起的更改。
close() 关闭数据库连接。

2.DriverMange类

这个类主要包含和数据库的交互方法

方法
描述
getConnection(String url, String user, String password) 获取与指定数据库的连接。传入数据库的URL、用户名和密码作为参数。
setLogonTimeout() 设置在尝试连接到数据库时等待的最长时间,超过该时间将引发异常。
println(String message) 打印消息到控制台或日志文件中。用于调试和记录信息。

案例代码:数据库的连接(基于MySQL)

数据库的连接与关闭

package com.company;
import java.sql.Connection;
import java.sql.DriverManager;
public class Main {
    public static void main(String[] args){
         final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
         final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
         final String DATABASE_USER ="mysql";
         final String DATABASE_PASSWORD ="xxxxxx";
        Connection conn = null;
         try {
//             通过反射加载mysql驱动
             Class.forName(DATABASE_DRIVER);
//             建立连接
              conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//             输出连接对象信息
             System.out.println(conn);
//             关闭连接
             conn.close();
         }catch (Exception e){
             e.printStackTrace();
         }
    }
}

image.gif

3.Statement接口

该接口是java执行数据库的重要操作,在建立完成数据库连接的基础上,向数据库发送需要执行的SQL的语句

方法 描述
execute(String sql) 执行给定的 SQL 语句,返回一个布尔值表示是否执行成功。
executeQuery(String sql) 执行给定的查询 SQL 语句,返回一个结果集 ResultSet 对象。
clearBatch() 清除该 Statement 对象当前设置的批处理命令。
addBatch(String sql) 将 SQL 语句添加到当前的批处理中。
close() 关闭 Statement 对象。任何打开的结果集也将关闭。

1.在案例操作前先确保建立好一个列表

这里通过Datadrip工具也可以用其他的工具比如DBeaver、Navica可以t快速根据需求自动生成sql脚本,也可以通过sql语句自行创建。

创建一个Person表,定义了姓名,年龄,身份证,名族。并且设置了身份证为唯一的主码并且是唯一的。

具体sql语句如下:

create table Person
(
  name varchar(4) not null comment '姓名',
  age int null comment '年龄',
  ID int null comment '身份证',
  nation varchar(4) null comment '民族'
);
create unique index Person_ID_uindex
  on Person (ID);
alter table Person
  add constraint Person_pk
    primary key (ID);

image.gif

4.实现表的数据更新(增、改、删)

案例实现:实现插入sql信息

插入信息

姓名:王二  年龄:18 身份id:001 民族:汉族

SQL代码案例:

insert into person(name, age, ID, nation) VALUE ('王二',18 ,001 ,'汉族');

image.gif那么搭配JDBC实现数据库中表的插入代码如下:

package JavaWeb02;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class javaDemo {
    public static void main(String[] args)throws Exception {
        final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
        final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
        final String DATABASE_USER ="mysql";
        final String DATABASE_PASSWORD ="xxxxxx";
        String sql = "insert into person(name, age, ID, nation) VALUE ('王二',18 ,001 ,'汉族')";
//        加载驱动
        Class.forName(DATABASE_DRIVER);
//        建立连接
        Connection conn = null;
        conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据库操作对象
        Statement statement = conn.createStatement();
        int count = statement.executeUpdate(sql);
        System.out.println("更新行数"+count);
//      关闭数据库连接
        conn.close();
    }
}

image.gif在数据库中查询可以看到,确实是插入成功了

image.gif 已经会了插入就可以尝试其他操作,比如数据删除,数据修改等等只需要把sql内容改一下就行了

案例:数据修改

package JavaWeb03;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class javaDemo {
    public static void main(String[] args) throws Exception{
        final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
        final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
        final String DATABASE_USER ="mysql";
        final String DATABASE_PASSWORD ="xxxxxx";
        String sql = "update person set name='黄小龙',age=99 where name='王二'";
//        加载驱动
        Class.forName(DATABASE_DRIVER);
//        建立连接
        Connection coon = null;
        coon = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据库操作对象
        Statement statement = coon.createStatement();
        System.out.println("更新的行数"+statement.executeUpdate(sql));
        coon.close();
    }
}

案例:数据删除

image.gif

package JavaWeb04;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class javaDemo {
    public static void main(String[] args) throws Exception{
        final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
        final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
        final String DATABASE_USER ="mysql";
        final String DATABASE_PASSWORD ="xxxxxxx";
//        想要执行的sql语句
        String sql ="delete from person where name='王二'";
//        加载驱动
        Class.forName(DATABASE_DRIVER);
//        连接数据库
        Connection conn = null;
        conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据库操作对象
        Statement statement = conn.createStatement();
        statement.executeUpdate(sql);
//        关闭连接
        conn.close();
    }
}

image.gif

5.实现数据查找(ResultSet接口)

数据查询返回的值需要用ResultSet接口进行封装

image.gif 以下是接口ResultSet接口的常用方法:

方法名 描述
next() 将游标移动到结果集中的下一行,并返回是否还有更多行可用的布尔值。在循环中逐行处理结果集时使用。
getXxx(int columnIndex) 根据列的索引获取当前行指定列的数据。columnIndex是从1开始计数的列索引。getXxx代表具体的数据类型,如getInt、getString等。返回指定列的数据,可以进行类型转换。
getXxx(String columnLabel) 根据列的名称获取当前行指定列的数据。columnLabel是列的字符串形式名称。类似于getXxx(int columnIndex)方法,返回指定列的数据。
close() 关闭结果集,释放与结果集相关的资源。在不再需要访问结果集时,应该调用此方法来关闭结果集,以便及时释放资源。

数据查询案例:

数据库内容:

image.gif 案例代码:

package JavaWeb05;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class javaDemo {
    public static void main(String[] args)throws Exception {
        final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
        final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
        final String DATABASE_USER ="mysql";
        final String DATABASE_PASSWORD ="xxxxxxx";
        String sql = "select name, age, ID, nation from person";
//        加载驱动
        Class.forName(DATABASE_DRIVER);
//        建立连接
        Connection conn = null;
        conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建操作对象,并且对象使用的是执行查找语句的方法
        Statement statement = conn.createStatement();
        ResultSet rs = statement.executeQuery(sql);
//        需要按照定义的类型进行接收
        while (rs.next()){
            String name = rs.getString("name");
            int age = rs.getInt("age");
            int id = rs.getInt("id");
            String nation = rs.getString("nation");
            System.out.println("name="+name+" age="+age+" id="+id+" nation="+nation);
        }
//        退出连接
        conn.close();
        rs.close();
    }
}

image.gif

6.PreparedStatement 数据更新

问题引入:如果要正常插入数据并且使用statement接口则代码会如下:

package JavaWeb06;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class javaDemo {
    public static void main(String[] args)throws  Exception {
        final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
        final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
        final String DATABASE_USER ="mysql";
        final String DATABASE_PASSWORD ="xxxxxx";
        String name ="汪心";
        int id = 100;
        String nation = "汉族";
        int age = 32;
        String sql = "insert into person(name, age, ID, nation)VALUE("+name+","+age+","+id+","+nation+")";
//        加载驱动
        Class.forName(DATABASE_DRIVER);
//        连接
        Connection conn = null;
        conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据操作对象
        Statement statement = conn.createStatement();
        statement.executeUpdate(sql);
//        关闭对象
        conn.close();
    }
}

image.gif可以看到,如果用statement接口,那么会需要一个完整的sql语句,而sql语句需要通过拼接起来,非常麻烦,所以引入了PreparedStatement

Preparedstatement的常用方法如下:

方法 描述
executeUpdate() 执行 INSERT、UPDATE 和 DELETE 等更新操作,并返回更新的行数。
executeQuery() 执行 SELECT 查询操作,并返回结果集。
setXxx(index, value) 通过索引设置参数值,其中 Xxx 表示数据类型,如 setIntsetString 等。
setXxx(parameterName, value) 通过参数名设置参数值,其中 Xxx 表示数据类型,如 setIntsetString 等。
setNull(index, dataType) 设置参数为空值。
getGeneratedKeys() 获取生成的键。

Preparedstatement与Statement相比在编写sql语句的时候可以用"?"进行占位符的设计,在通过conn.prepareStatement(sql语句)创建对象时候,将sql作为参数传入进去,对于每一位的?占位符都可以通过对象.set类型(第几个占位符,类型值)

以下案例代码实现通过Preparedstatement向数据库插入一条数据

插入案例代码:

package JavaWeb07;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class javaDemo {
    public static void main(String[] args)throws Exception {
        final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
        final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
        final String DATABASE_USER ="mysql";
        final String DATABASE_PASSWORD ="xxxxxx";
        String name ="汪心";
        int id = 100;
        String nation = "汉族";
        int age = 32;
        String sql ="insert into person(name, age, ID, nation)VALUES"+"(?,?,?,?)";
//        加载驱动
        Class.forName(DATABASE_DRIVER);
//        建立连接
        Connection conn = null;
        conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据操作对象
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        preparedStatement.setString(1,name);
        preparedStatement.setInt(2,age);
        preparedStatement.setInt(3,id);
        preparedStatement.setString(4,nation);
        int count = preparedStatement.executeUpdate();
        System.out.println("本次更新的行数"+count);
//        关闭连接
        conn.close();
    }
}

image.gifimage.gif案例 数据查询:

package JavaWeb08;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class javaDemo {
    public static void main(String[] args)throws  Exception {
        final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
        final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";
        final String DATABASE_USER ="mysql";
        final String DATABASE_PASSWORD ="xxxxxxx";
        String sql ="select name, age, ID, nation from person";
        //        加载驱动
        Class.forName(DATABASE_DRIVER);
//        建立连接
        Connection conn = null;
        conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据操作对象
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        ResultSet rs = preparedStatement.executeQuery();
        while (rs.next()){
//            ResultSet通过占位符的位置获取信息
            String name = rs.getString(1);
            int age  = rs.getInt(2);
            int id = rs.getInt(3);
            String nation = rs.getString(4);
            System.out.println("name="+name+" age="+age+" id="+id+" nation="+nation);
        }
//        关闭连接
        conn.close();
        rs.close();
    }
}

image.gif

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
43 8
|
9天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
SQL Java 关系型数据库
MySQL数据库基础:增删查改
本文详细介绍了数据库中常用数据类型的使用方法及其在Java中的对应类型,并演示了如何创建表、插入数据、查询数据(包括全列查询、指定列查询、去重查询、排序查询、条件查询和分页查询)、修改数据以及删除数据。此外,还特别强调了处理NULL值时的注意事项,以及在执行修改和删除操作时应谨慎使用条件语句,以避免误操作导致的数据丢失。
73 14
MySQL数据库基础:增删查改
|
24天前
|
SQL Java 数据库
Springboot+spring-boot-starter-data-jdbc实现数据库的操作
本文介绍了如何使用Spring Boot的spring-boot-starter-data-jdbc依赖来操作数据库,包括添加依赖、配置数据库信息和编写基于JdbcTemplate的数据访问代码。
20 2
|
21天前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
19 0
|
3月前
|
SQL Java 数据库连接
JDBC之旅:从陌生到熟悉的Java数据库连接之路
JDBC之旅:从陌生到熟悉的Java数据库连接之路
26 8
|
3月前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
32 7
|
16天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
50 3
Mysql(4)—数据库索引
|
1天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
19 2
|
4天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
20 4