Java的数据库编程:JDBC

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Java的数据库编程:JDBC

Content

🎉1什么是API

🎉2.什么是JDBC

🎉3.数据库驱动包的安装

🎉4.数据库安装包在idea的使用

🎉5.JDBC的增删改查的简单实现

今天为大家带来JAVA的数据库编程,也就是用Java实现数据库


数据库的最基本的操作就是增删改查


在实工作中,手敲sql语句几乎用不到,更多的是用代码来实现sql语句


像常见的数据库,比如mysal,sqlsever,Oracle等数据库软件,在开发的时候会提供编程的接口,叫做API


什么是API呢,也就是实现某种功能,例如Java的接口,就是API,比如Collection接口,里面有很多方法,可以实现很多功能,总的来说API多用于函数的形式来表示


现在要用Java实现数据库,那么也需要提供一个API用来对接Java和数据库,那么就要用JDBC,Java对数据库提出要求,数据库本来的功能上要增加一些来匹配Java,这样才可以让Java操作数据库,执行数据库.


JDBC,全称,Java Database Connectivity,是java和数据库的连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。可以为多种关系数据库提供统一访问.

73a4a192f9b441dab15e509577fc4e5e.pngJava通过JDBC操作数据库,那jdbc和数据库建立连接的时候,需要使用数据库驱动包,就是对不同数据库的原生API进行封装,封装成JDBC认识的API,,Java需要在项目导入数据库驱动包,也才能执行数据库,那么我们就需要下载驱动包,这里我们选择去maven中央仓库下载


上链接


https://mvnrepository.com/


6f16ba01b778444ab1feb6a69a23518b.png

1be28033c5684479a29a26683e83706c.png


这个要和自己下载的数据库的版本要匹配,因为我下载的是5系列的,所以我要用这个,5开头的都可以选


6818302a0a254d46be1cb1304935d94b.png


点击这个


然后下载了,之后,建立一个项目,然后在项目点新建directory,拷贝这个地址,就建立了lib文件


7dd20ccf121447a6a9bd90c502bcde28.png

就像这样,这样数据库就和java建立连接了,现在就可以开始在idea编辑数据库代码了


还是和数据库一样,实现增删改查,上代码


import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.ConnectionEvent;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2023-03-03
 * Time: 20:57
 */
//JDBC实现sql
public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
            //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.构造sql语句
        String sql="insert into student values(1,'张三')";
        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        //4.执行sql语句
      int ret=  statement.executeUpdate();
        System.out.println(ret);
        //5.释放必要的资源
        statement.close();
        connection.close();
    }
}

d31270d6f1764137b8893c0e124337c5.png


3b72e8c528454ba1ae1bc9ece9f89e5a.png

看看执行结果,在idea上结果是1的原因是,stament.executeUpdate这个方法返回类型就是int型的,代表修改的行数


执行完以后记得释放资源


现在对这段代码进行优化,发现在构造sql语句的时候比较麻烦,进行优化


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


这个语句把要输入的内容写死了,也就是硬编码,在现实开发环境中,要为用户考虑,所以要写用户输入


public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");
        int id=scanner.nextInt();
        //4.构造sql语句
        String sql="insert into student values("+id+",'"+name+"')";
        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        //5.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);
        //6.释放必要的资源
        statement.close();
        connection.close();
    }


但是这种写法容易产生sql注入问题


 public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");
        int id=scanner.nextInt();
        //4.构造sql语句
        String sql="insert into student values(?,?)";
        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        statement.setInt(1,id);
        statement.setString(2,name);
        //5.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);
        //6.释放必要的资源
        statement.close();
        connection.close();
    }

1adec3645ea8403d8a03be7235f4ad0a.png


问号代表占位符,下面的setint里面的1,id代表第一个问号放id,第二个问号放name ,然后根据动态输入就自动放入到sql语句中

e1b45365834e459ca2265b810f0b473f.png

395b4982ec354df68e7a48d0bcc5dd40.png

这一段就是Preparestatement方法拼接以后 的数据


释放资源:


数据库的客户端和服务器通过网络进行通信,需要占用一定的资源,但客户端很多,服务器很少时,要即及时释放资源


谁先创建,谁就后释放


DataSource内置了数据库连接池,可以复用连接,提高连接服务器的效率


现在写查询操作


public class TestDemo {
    public static void main(String[] args) throws SQLException {
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        //3.构造sql语句
        String sql="select* from student";
        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        //4.执行sql语句
      ResultSet resultSet= statement.executeQuery();
      //5遍历结果集合
       while(resultSet.next()){
           int id=resultSet.getInt("id");
           String name=resultSet.getString("name");
           System.out.println("+id+"+id+"name"+name);
       }
        //6.释放必要的资源
        resultSet.close();
        statement.close();
        connection.close();
    }

resultset这个代表查询的结果集,用到的get方法相当于就是拿到某下标 的元素

删除操作


public static void main(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        /*//3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");
        int id=scanner.nextInt();*/
        //4.构造sql语句
        String sql="delete from student where id=1";
      PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
      /*  statement.setInt(1,id);
        statement.setString(2,name);*/
        System.out.println(statement);
        //5.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);
        //6.释放必要的资源
        statement.close();
        connection.close();
    }
}


修改操作


 public static void main1(String[] args) throws SQLException {
        Scanner scanner=new Scanner(System.in);
        //JDBC需要以下步骤完成开发
        //1.创建并初始化一个数据源
        DataSource dataSource=new MysqlDataSource();//向上转型
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
        ((MysqlDataSource)  dataSource).setUser("root");//设置用户名
        ((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码
        //2.和数据库服务器建立连接
        Connection connection=dataSource.getConnection();
        /*//3.从控制台读取用户输入的的内容
        System.out.println("请输入姓名");
        String name=scanner.next();
        System.out.println("请输入学号");*/
        /*int id=scanner.nextInt();*/
        //3.构造sql语句
        String sql="update student set id=12 where name='张三'";
        PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
        System.out.println(statement);
        //4.执行sql语句
        int ret=  statement.executeUpdate();
        System.out.println(ret);
        //5.释放必要的资源
        statement.close();
        connection.close();
    }

这就是今天的所有内容了,我们下期再见!!!

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
0
分享
相关文章
2025 更新必看:Java 编程基础入门级超级完整版指南
本教程为2025更新版Java编程基础入门指南,涵盖开发环境搭建(SDKMAN!管理JDK、VS Code配置)、Java 17+新特性(文本块、Switch表达式增强、Record类)、面向对象编程(接口默认方法、抽象类与模板方法)、集合框架深度应用(Stream API高级操作、并发集合)、模式匹配与密封类等。还包括学生成绩管理系统实战项目,涉及Maven构建、Lombok简化代码、JDBC数据库操作及JavaFX界面开发。同时提供JUnit测试、日志框架使用技巧及进阶学习资源推荐,助你掌握Java核心技术并迈向高级开发。
133 5
Java 编程进阶实操中工具集整合组件封装方法与使用指南详解
本文详细介绍Hutool工具集和图书管理系统相关组件的封装方法及使用示例。通过通用工具类封装(如日期格式化、字符串处理、加密等)、数据库操作封装(结合Hutool DbUtil与MyBatis)、前端Vue组件封装(图书列表与借阅表单)以及后端服务层封装(业务逻辑实现与REST API设计),帮助开发者提升代码复用性与可维护性。同时,提供最佳实践建议,如单一职责原则、高内聚低耦合、参数配置化等,助力高效开发。适用于Java编程进阶学习与实际项目应用。
106 10
java 编程基础入门级超级完整版教程详解
这份文档是针对Java编程入门学习者的超级完整版教程,涵盖了从环境搭建到实际项目应用的全方位内容。首先介绍了Java的基本概念与开发环境配置方法,随后深入讲解了基础语法、控制流程、面向对象编程的核心思想,并配以具体代码示例。接着探讨了常用类库与API的应用,如字符串操作、集合框架及文件处理等。最后通过一个学生成绩管理系统的实例,帮助读者将理论知识应用于实践。此外,还提供了进阶学习建议,引导学员逐步掌握更复杂的Java技术。适合初学者系统性学习Java编程。资源地址:[点击访问](https://pan.quark.cn/s/14fcf913bae6)。
118 2
Java 编程进阶实操之工具集整合应用指南
本文聚焦Java编程进阶实操,涵盖并发编程、性能优化及数据库操作优化等核心知识点,并结合Hutool、Postman、Git等实用工具,提供从理论到实践的学习路径。通过小型图书管理系统实战项目,详细解析技术选型与实现步骤,助力开发者掌握Spring Boot、MyBatis等框架应用。同时展望Java新特性与技术趋势,为职业发展奠定基础。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
61 1
Java编程实用技巧:提升代码质量与开发效率
Java作为一门成熟且广泛应用的编程语言,掌握一些实用技巧可以显著提高开发效率和代码质量。以下是值得Java开发者掌握的实用技巧:
58 6
2025 年 Java 秋招面试必看 Java 并发编程面试题实操篇
Java并发编程是Java技术栈中非常重要的一部分,也是面试中的高频考点。本文从基础概念、关键机制、工具类、高级技术等多个方面进行了介绍,并提供了丰富的实操示例。希望通过本文的学习,你能够掌握Java并发编程的核心知识,在面试中取得好成绩。同时,在实际工作中,也能够运用这些知识设计和实现高效、稳定的并发系统。
37 0
2025 年 Java 秋招面试必看的 Java 并发编程面试题汇总
文章摘要: 本文系统梳理Java并发编程核心知识点,助力2025年秋招面试。内容涵盖:1)基础概念,包括线程/进程区别、创建线程的3种方式(Thread/Runnable/Callable)、6种线程状态及转换;2)关键机制,对比sleep()与wait()的锁行为差异,解释start()而非run()启动线程的原因;3)工具类与典型应用场景。通过技术原理与代码示例结合的方式,帮助开发者深入理解并发模型、线程同步等核心问题,为高并发系统设计打下坚实基础。(150字)
61 0
Java并发编程之Future与FutureTask
本文深入解析了Future接口及其实现类FutureTask的原理与使用。Future接口定义了获取任务结果、取消任务及查询任务状态的规范,而FutureTask作为其核心实现类,结合了Runnable与Future的功能。文章通过分析FutureTask的成员变量、状态流转、关键方法(如run、set、get、cancel等)的源码,展示了异步任务的执行与结果处理机制。最后,通过示例代码演示了FutureTask的简单用法,帮助读者更直观地理解其工作原理。适合希望深入了解Java异步编程机制的开发者阅读。
【高薪程序员必看】万字长文拆解Java并发编程!(1)
📌 核心痛点暴击:1️⃣ 面了8家都被问synchronized锁升级?一张图看懂偏向锁→重量级锁全过程!2️⃣ 线程池参数不会配?高并发场景下这些参数调优救了项目组命!3️⃣ volatile双重检测单例模式到底安不安全?99%人踩过的内存可见性大坑!💡 独家亮点抢先看:✅ 图解JVM内存模型(JMM)三大特性,看完再也不怕指令重排序✅ 手撕ReentrantLock源码,AQS队列同步器实现原理大揭秘✅ 全网最细线程状态转换图(附6种状态转换触发条件表)
55 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问