【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱

ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客

本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶

个人主页xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客

系列专栏:xiaoxie的MySql学习系列专栏——CSDN博客●'ᴗ'σσணღ

我的目标:"团团等我💪( ◡̀_◡́ ҂)"

( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝+关注(互三必回)!

一.准备工作

JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

1.准备数据库驱动包

首先我们需要打开中央仓库Maven Repository: Search/Browse/Explore (mvnrepository.com)

2.在IDEA上的准备工作

1.帮刚才下载好的这个.jar文件复制

2.粘贴到你要连接数据库的相应的文件

3.再右键点击.jar文件,添加为库

4.完成结果展示

二.JDBC的使用

1.在数据库中建好相应的表

这里博主就在MySql上随意创建了一张students表作为测试使用(当然你也可以在IDEA创建,不过一般来说我们都是在MySql上提前创建好表)

create table students(id int primary key ,name varchar(20),age int);

2.创建DataSource数据源

DataSource 数据源.

要操作的数据库,数据, 是在哪里,

在 MySQL 中,就需要设定好,MySQL 服务器的位置,要访问的数据库的名字,访问数据库的用户名和密码.

// 1. 创建 "数据源" (DataSource)
         DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/textcharacterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("010920");

1.说明

1. ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/textcharacterEncoding=utf8&useSSL=false");

URL:
协议的名称://ip地址:端口号/数据库名?参数=值&参数=值

一般来说,只需要你修改一下数据库名,别的复制粘贴即可

2.   ((MysqlDataSource) dataSource).setUser("root");

设置用户名,mysql 中可以手动创建各种名字的用户默认会自带一个 root 用户root 是一个管理员账户,(权限最大的账户),一般这段也是照抄即可

3. ((MysqlDataSource) dataSource).setPassword("010920");

设置密码,输入你当时数据库设置的密码即可,如果你没有设置密码的话可以将密码设置为一个空字符串或者null.

((MysqlDataSource) dataSource).setPassword("");//空字符串
((MysqlDataSource) dataSource).setPassword(null);//null
 

同时需要注意的是不同数据库这里的操作不一样,这里博主介绍的是Mysql数据库的操作方法,对于别的数据库操作不一样

3.建立连接

进行 客户端·服务器 之间通信的时候,常见有两种通信的模式:

1)有连接 (JDBC 这里, 就属于是"有连接” 就需要先拨号)

2)无连接

Connection connection = dataSource.getConnection();

注意这里可能会出现异常,我们需要抛出异常

如果一切顺利,连接建立成功,此时就能够得到 Connection 对象.在 getConnection 很可能失败的(服务器没有接受连接)原因有很多种,包括不限于:

1)数据库服务器没有正确启动.

2) url 写错了

3)用户名写错了

4) 密码写错了

5)网络断开了(网线掉了...)

.....

4.构造Sql语句

String sql = "insert into students values(1,'张三',18)";

5.创建语句对象

PreparedStatement preparedStatement = connection.prepareStatement(sql);
  1. 通过connection对象创建了一个PreparedStatement对象,connection是一个表示数据库连接的对象。
  2. sql是一个包含SQL语句的字符串变量,它作为参数传递给prepareStatement方法,用于创建一个预编译的SQL语句的对象。
  3. preparedStatement是一个用于执行SQL语句的对象,它可以用来执行查询、更新或删除数据库中的数据。

通过使用PreparedStatement对象,可以有效地执行SQL语句并防止SQL注入攻击。

6.开始运行与结果

int n = preparedStatement.executeUpdate();
        System.out.println("n = " + n);

这段代码是在Java中使用PreparedStatement对象执行更新操作,并获取更新的行数。具体来说,这段代码做了以下几件事情:

  1. executeUpdate()方法用于执行SQL语句并返回受影响的行数。在这里,通过调用preparedStatement.executeUpdate()方法执行了SQL语句,并将返回的受影响行数赋给整型变量n
  2. System.out.println("n = " + n);这行代码用于将更新的行数n输出到控制台。这样可以查看执行SQL语句后影响的行数,以便进行后续的处理或调试。

总之,这段代码执行了SQL更新操作,并输出了更新的行数。

结果:

这里显示的就是我们对students表的插入操作,并更新了1行结果

这时我们在查看数据库的信息可以看到如下结果

这样就实现了通过java来交互数据库的数据了;

7.收尾工作

preparedStatement.close();
        connection.close();

执行完毕, 有收尾操作. 释放前面创建的各种资源.主要是释放 语句对象 和 连接对象. DataSource 是不必释放的.

大家都知道,jvm会帮我们做收尾工作,为什么我们还需要手动释放呢,我们手动释放是为了:

在Java中,当使用完数据库连接和PreparedStatement等资源后,最好手动关闭这些资源以释放数据库连接和其他相关资源,而不是依赖JVM的垃圾回收机制来释放资源。尽管JVM会在适当的时候回收不再使用的对象,但是对于数据库连接等资源,及时手动关闭是一个良好的编程习惯,可以避免资源泄霍和提高程序的性能。

8.手动输入数据

我们刚刚看到前面的第四点,构造Sql语句时,我们是直接定好了要输入的数据,当如果我们想手动输入数据的话我们可以使用如下的方法

Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name = scanner.next();
        System.out.println("请输入年龄: ");
        int age = scanner.nextInt();
        String sql = "insert into students values(?, ?, ?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, id);
        preparedStatement.setString(2, name);
        preparedStatement.setInt(3, age);

查看结果:

9.插入操作的全部代码

这里也可以执行多条Sql语句,使用一下循环即可,这里就不过多的赘述

 public static void main(String[] args) throws SQLException {
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/text?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("010920");
        Connection connection = dataSource.getConnection();
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
        String name = scanner.next();
        System.out.println("请输入年龄: ");
        int age = scanner.nextInt();
        String sql = "insert into students values(?, ?, ?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, id);
        preparedStatement.setString(2, name);
        preparedStatement.setInt(3, age);
        int n = preparedStatement.executeUpdate();
        System.out.println("n = " + n);
        preparedStatement.close();
        connection.close();
    }

10.查询操作

上文介绍了插入操作的过程,由于删除操作和,修改操作都差不多,只需要修改Sql语句,博主就不过多的赘述了,这里解释一下与它们不同的查询操作的写法

public static void main(String[] args) throws SQLException {
    DataSource dataSource = new MysqlDataSource();
    ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/text?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource) dataSource).setUser("root");
    ((MysqlDataSource) dataSource).setPassword("010920");
    Connection connection = dataSource.getConnection();
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入要查询的学生姓名: ");
    String name = scanner.next();
    
    String sql = "select * from students where name = ?";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, name);
    
    ResultSet resultSet = preparedStatement.executeQuery();
    
    while(resultSet.next()) {
        int id = resultSet.getInt("id");
        String studentName = resultSet.getString("name");
        int age = resultSet.getInt("age");
        System.out.println("学号: " + id + ", 姓名: " + studentName + ", 年龄: " + age);
    }
    
    preparedStatement.close();
    connection.close();
}

在执行查询操作时,与执行插入操作相比,有以下不同之处:

  1. SQL语句不同:查询操作使用SELECT语句,而插入操作使用INSERT语句。
  2. 参数设置不同:查询操作通常需要设置查询条件的参数,而插入操作需要设置插入的数值。
  3. 执行方法不同:查询操作使用executeQuery()方法执行查询,而插入操作使用executeUpdate()方法执行插入。
  4. 结果处理不同:查询操作需要通过ResultSet对象处理查询结果,而插入操作通常不需要处理返回结果。

这些是执行查询操作与插入操作的主要不同之处。在实际开发中,根据具体需求和业务逻辑,会有更多细微的差别和处理方式。

查询结果如下:

三.一些问题汇总和解决方法

1.数据库没有连接上

如果出现上面这样的错误,你就应该要查看是否IP输入错误,或者是端口号输入错误

2.数据库名输入错误

如果出现上面这样的错误,你就应该要查看你数据库名是否输入错误

3.用户名/密码输入错误

这个时候你就要检查一下密码和用户名是否输入失败了,如果你忘记密码的话可以执行以下几点步骤:

1. 关闭正在运行的MySQL服务。win+r输入:services.msc回车,找到MySQL,手动关闭MySQL服务

2. 打开DOS窗口,利用cd命令转到mysql的bin目录:建议直接找到mysql的bin目录下输入cmd回车3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。

4. 再开一个DOS窗口(刚才那个DOS窗口已经不能动了),转到mysql的bin目录。

5. 输入mysql回车,如果上面修改成功,将直接出现 mysql> 这样的提示符。

6. 连接权限数据库:use mysql

6. 改密码:update user set password=password("123") where user="root";

7. 刷新权限(必须步骤):flush privileges; (不要忘记分号)

8.exit或者ctrl+c退出,进行重新登陆

以上就是JDBC的所有内容了,感谢你的阅读


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
25天前
|
Cloud Native 关系型数据库 分布式数据库
|
1月前
|
存储 关系型数据库 分布式数据库
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
18天前
|
自然语言处理 Java 关系型数据库
Java|小数据量场景的模糊搜索体验优化
在小数据量场景下,如何优化模糊搜索体验?本文分享一个简单实用的方案,虽然有点“土”,但效果还不错。
28 0
|
25天前
|
存储 关系型数据库 分布式数据库
|
10天前
|
存储 关系型数据库 MySQL
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
本文详细介绍了在 MySQL 中创建数据库和表的方法。包括安装 MySQL、用命令行和图形化工具创建数据库、选择数据库、创建表(含数据类型介绍与选择建议、案例分析、最佳实践与注意事项)以及查看数据库和表的内容。文章专业、严谨且具可操作性,对数据管理有实际帮助。
大数据新视界 --面向数据分析师的大数据大厂之 MySQL 基础秘籍:轻松创建数据库与表,踏入大数据殿堂
|
18天前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
23天前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
23天前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。

热门文章

最新文章