【JDBC编程】 Java程序操作数据库

目录

一、数据库编程的必备条件

二、什么是JDBC?

三、JDBC的使用

1. 准备工作

2. 建立数据库连接

2.1 加载驱动程序

2.2 数据库连接池技术

3. 正式操作

四、JDBC的局限性与MyBatis的优势


一、数据库编程的必备条件

  • 编程语言,如JavaCC++Python
  • 数据库,如OracleMySQLSQL Server
  • 数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc

二、什么是JDBC?

JDBC(即Java Database Connectivity,java数据库连接)是 Java 提供的标准接口用于在 Java 程序中实现与数据库的连接和操作。通过 JDBC,你可以使用 Java 代码来执行 SQL 语句、连接数据库、处理事务以及处理查询结果等。这个APIjava.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。

三、JDBC的使用

1. 准备工作

  • 准备数据库驱动包(中央仓库地址),并添加到项目的依赖中:

 

  • 在项目中创建文件夹lib,并将依赖包mysql-connector-java-5.1.47.jar(版本都可以)复制到lib中。再配置该jar 包到本项目的依赖中:右键点击项目Open Module Settings,在Modules中,点击项目,配置 Dependencies,点击+JARS or Directories,将该lib文件夹配置进依赖中,表示该文件夹下的 jar包都引入作为依赖。

2. 建立数据库连接

这里有两种方式,主要使用第二种

2.1 加载驱动程序

  • 在使用 JDBC 之前,需要加载特定数据库的驱动程序,可以通过 Class.forName() 方法来加载数据库厂商提供的驱动程序类。这一步通常只需要执行一次。
// 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法
//区,并执行该类的静态方法块、静态属性。
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/test?
user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
//MySQL 数据连接的 URL 参数格式如下:
jdbc : mysql : // 服务器地址 : 端口 / 数据库名 ? 参数名 = 参数值

2.2 数据库连接池技术

通过创建 DataSource 对象来连接数据库,而不是直接加载驱动程序来获取数据库连接。这种方式是使用数据库连接池技术,相较于直接加载驱动程序连接数据库,有以下区别:

  1. 使用 DataSource 连接池

    通过创建 DataSource 对象,你可以配置数据库连接池的相关参数,包括最大连接数、最小连接数、连接超时时间等。连接池能够管理数据库连接的复用和释放,提高了数据库连接的效率和性能。
  2. 简化连接管理

    使用 DataSource 连接池可以简化数据库连接的管理,避免了手动管理数据库连接的繁琐操作。连接池会自动管理连接的获取和释放,开发者只需从连接池中获取连接即可。
  3. 提高性能

    连接池可以减少每次请求都重新建立数据库连接的开销,重复利用已经建立的连接,从而提高系统性能。
  4. 避免频繁创建连接

    连接池会预先创建一定数量的数据库连接并保持在池中,当需要连接时直接从连接池中获取可用连接,避免了频繁创建和关闭连接的开销。
        //1.创建数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("数据库密码");
//ser Url 参数格式如下:
jdbc : mysql : // 服务器地址 : 端口 / 数据库名 ? 参数名 = 参数值
这个直接复制粘贴就好了,密码就是自己当初设置的数据库密码

3. 正式操作

使用 JDBC 进行数据库操作的一般步骤如下(使用数据库连接池技术):

  1. 创建并配置数据源:使用连接池库提供的数据源对象(如 BasicDataSource 或 HikariDataSource),并设置相关的数据库连接信息,包括数据库 URL、用户名、密码等。

  2. 建立数据库连接:使用 java.sql.Connection 接口提供的方法,例如 DriverManager.getConnection(),来建立与数据库的连接。

  3. 创建 SQL 语句:使用 SQL 语句来执行数据库操作,例如查询数据、插入数据、更新数据等。可以使用 java.sql.Statementjava.sql.PreparedStatement 接口来创建 SQL 语句。区别:PreparedStatement会预编译sql语句。

  4. 执行 SQL 语句:通过调用 StatementPreparedStatement 接口的方法,例如 executeQuery()executeUpdate(),来执行 SQL 语句。executeQuery()方法用于查询操作executeUpdate()方法用于增删改操作

  5. 处理结果集:对于查询操作,可以通过 java.sql.ResultSet 接口获取查询结果,并进行相应的数据处理。

  6. 关闭连接和资源:使用完数据库连接、语句对象和结果集需要手动关闭,以释放相关资源,避免内存泄漏。

示例1  插入操作(删除和修改操作也几乎一致,只有中间sql语句的区别):

import com.mysql.cj.jdbc.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class JDBCDemo1 {public static void main(String[] args) throws SQLException {//1.创建数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("060374");//2.和数据库服务器建立连接Connection connection = dataSource.getConnection();//3.构造一个操作数据库的sql语句String sql = "insert into student values(4, '赵六')";PreparedStatement preparedStatement = connection.prepareStatement(sql);//4.执行sqlint n = preparedStatement.executeUpdate();System.out.println("n = " + n);//5.释放资源preparedStatement.close();connection.close();}
}

executeUpdate()方法用于增删改操作,返回值表示影响到的行数。


示例二 查询操作:

import com.mysql.cj.jdbc.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class JDBCDemo4 {public static void main(String[] args) throws SQLException {//1.创建数据源DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("060374");Connection connection = dataSource.getConnection();String sql = "select * from student";PreparedStatement preparedStatement = connection.prepareStatement(sql);ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");System.out.println("id = " + id + ", name = " + name);}preparedStatement.close();connection.close();}
}

executeQuery()方法用于查询操作,返回值表示一个数据集合。

四、JDBC的局限性与MyBatis的优势

虽然开发者可以直接使用 JDBC 来操作数据库,不需要依赖额外的框架或工具。但是它同样有很多不足之处:

  1. 繁琐的代码:使用原生的 JDBC 进行数据库操作需要编写大量重复、繁琐的代码,如加载驱动、建立连接、创建语句、处理结果集等,使得开发效率低下。

  2. SQL 与 Java 代码耦合度高:在 JDBC 中,SQL 语句通常直接硬编码在 Java 代码中,导致 SQL 与 Java 代码耦合度较高,一旦 SQL 发生变化,需要修改 Java 代码,不利于维护和扩展。

  3. 手动管理数据库资源:需要手动管理数据库连接、事务、异常处理等资源,容易出现连接泄露、资源未释放等问题,对开发者要求较高。

为了解决 JDBC 存在的问题,就出现了许多优化的框架。如MyBatis 这样的持久层框架,这也是当下非常流行的持久层框架之一,其优势主要体现在以下几个方面:

  1. 简化 SQL 操作:MyBatis 使用 XML 或注解配置 SQL 语句,将 SQL 与 Java 代码分离,降低了 SQL 与 Java 代码的耦合度,提高了代码的可维护性。

  2. 提供对象关系映射(ORM):MyBatis 提供了对象关系映射的功能,能够将查询结果映射为 Java 对象,简化了数据操作的过程,提高了开发效率。

  3. 自动化资源管理:MyBatis 管理数据库资源、事务等方面更加自动化,减轻了开发者的工作负担,避免了连接泄露、资源未释放等问题。

  4. 灵活的动态 SQL:MyBatis 提供了强大的动态 SQL 功能,可以根据条件动态生成 SQL 语句,满足灵活的查询需求。

MyBatis与JDBC的关系:

  • MyBatis 使用 JDBC 来实现底层的数据库访问,它不是替代 JDBC,而是对 JDBC 的一种封装和简化。MyBatis 使用 JDBC 来建立数据库连接、执行 SQL 语句和处理结果集,但相比直接使用 JDBC,MyBatis 提供了更高层次的抽象,简化了开发者对数据库的操作。

总的来说,MyBatis 出现是为了简化数据库操作、降低 SQL 与 Java 代码的耦合度、提高开发效率,并且提供更好的资源管理和灵活的动态 SQL 支持,从而弥补了 JDBC 在这些方面的不足。因此,在实际开发中,开发者很少会直接使用JDBC,而MyBatis 成为了许多 Java 开发者选择的持久层框架之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创业新手看过来!四招助你开启成功之旅

如果你每个月的薪资仅有几千块,还背负着债务的重担,家中的老少都期盼着你为他们撑起一片天,那么,你每日都可能为了如何打破这一困境而焦虑不安。不过,请稍安勿躁,今天我将为你提供四个建议,或许…

Transformer学习笔记(二)

一、文本嵌入层Embedding 1、作用: 无论是源文本嵌入还是目标文本嵌入,都是为了将文本中词汇的数字表示转变为向量表示,希望在这样的高维空间捕捉词汇间的关系。 二、位置编码器Positional Encoding 1、作用: 因为在Transformer…

解锁区块链游戏数据解决方案

作者:stellafootprint.network 随着区块链技术的日新月异,游戏行业正迎来一场革命,催生了区块链游戏的崛起。这一变革不仅为用户带来了全新的互动体验,也开辟了全新的盈利渠道。然而,在这一新兴领域,数据的…

html--花瓣

代码 <!DOCTYPE html> <html lang"en" ><head> <meta charset"UTF-8"> <title>Petals</title><link rel"stylesheet" href"css/style.css"></head><body><div class"…

Jpg图片变gif怎么操作?1分钟教你在线生成

jpg是一种常见的图像文件格式&#xff0c;它使用有损压缩算法来减小文件大小。这意味着JPG图像可以在保持较高质量的同时减小文件大小&#xff0c;但会导致一些细节的损失。JPG图像适用于存储照片和其他需要高质量图像的场景。而GIF是一种支持动画的图像文件格式。与JPG不同&am…

【类脑智能】脑网络通信模型分类及量化指标(附思维导图)

脑网络通信模型分类及量化指标(附思维导图) 参考论文&#xff1a;Brain network communication_ concepts, models and applications 概念 脑网络通信模型是一种使用图论和网络科学概念来描述和量化大脑结构中信息传递的模型。这种模型可以帮助研究人员理解神经信号在大脑内…

管理类联考–复试–政治--二十大--记忆宫殿

文章目录 整体记忆宫殿门床头柜床书桌阳台 口诀记忆法 整体 记忆宫殿 要有逻辑的放到房间了 何为逻辑&#xff0c;如下大佬总结的便是&#xff0c;或者可自行总结&#xff0c;有前后顺序&#xff0c;做事逻辑即可 第一步&#xff1a;将逻辑的点放到房间里的点&#xff0c;…

CASA模型在陆地生态系统碳循环研究中的应用探讨

植被&#xff0c;作为陆地生态系统的重要基石&#xff0c;对维护生态环境功能具有不可替代的作用。其中&#xff0c;植被净初级生产力&#xff08;NPP&#xff09;是衡量植被生态系统健康与功能的关键指标。它反映了单位面积上绿色植被通过光合作用生产的有机质总量在扣除自养呼…

基于springboot实现房源出租信息系统项目【项目源码+论文说明】

基于springboot实现房源出租信息系统演示 摘要 近些年来在一线城市的房子需求量在逐步递增&#xff0c;其中租房子和出租房子的需求业务不断增加。那么租房对于我们一线二线城市来说是一个非常大&#xff0c;而且具有经济提升能力的业务场景。那么信息技术在此行业的加持早已是…

SwiftUI自定义ButtonStyle

SwiftUI自定义ButtonStyle 记录一下如何通过自定义SwiftUI自定义ButtonStyle&#xff0c;来给按钮设计一个点击样式 import SwiftUI /*本文章 通过创建ButtonStyle&#xff0c;来自定义按钮的点击动画*/struct PressButtonStyle: ButtonStyle {func makeBody(configuration: …

2024-03-14 Android app runOnUiThread 函数,它的作用是让一个Runnable对象在主线程(UI线程)上运行。

一、看到别人app有这么一个runOnUiThread 函数用法。 二、在Android中&#xff0c;runOnUiThread 是一个非常重要的方法&#xff0c;它的作用是让一个Runnable对象在主线程&#xff08;UI线程&#xff09;上运行。在Android中&#xff0c;主线程是负责更新UI的线程&#xff0c;…

【JVM】GCRoot

GC root原理 通过对枚举GCroot对象做引用可达性分析&#xff0c;即从GC root对象开始&#xff0c;向下搜索&#xff0c;形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用&#xff0c;没有形成引用链&#xff0c;那么该对象等待GC回收。 可以作为GC Roots的对…

基于SSM SpringBoot vue办公自动化计划管理系统

基于SSM SpringBoot vue办公自动化计划管理系统 系统功能 登录注册 个人中心 员工信息管理 部门信息管理 会议管理 计划管理 行程安排管理 行程进度管理 管理员管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或SpringBoot 前端…

手搭手RocketMQ重试机制

环境介绍 技术栈 springbootmybatis-plusmysqlrocketmq 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1.7 dynamic-datasource 3.6.1 mybatis-plus 3.5.3.2 rocketmq 4.9.4 加入依赖 <dependencies><dependency><…

《Python深度学习》阅读笔记

以下是《Python深度学习》一书中学习过程中记录的一些重要的专属名词和概念&#xff1a; 一、概念 深度学习&#xff08;Deep Learning&#xff09;&#xff1a;指使用多层神经网络进行机器学习的技术。神经网络&#xff08;Neural Network&#xff09;&#xff1a;一种模仿生…

SpringBoot打造企业级进销存储系统 第五讲

package com.java1234.repository;import com.java1234.entity.Menu; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;import java.util.List;/*** 菜单Repository接口*/ public interface MenuReposit…

第二百零五回

文章目录 概念介绍响应方法滑动事件点击事件 经验总结 我们在上一章回中介绍了如何给ListView添加分隔线,本章回中将介绍ListView响应事件相关的知识.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里说的ListView响应事件主要分两种类型&#xff0c;一种…

【深度学习模型移植】用torch普通算子组合替代torch.einsum方法

首先不得不佩服大模型的强大之处&#xff0c;在算法移植过程中遇到einsum算子在ONNX中不支持&#xff0c;因此需要使用普通算子替代。参考TensorRT - 使用torch普通算子组合替代torch.einsum爱因斯坦求和约定算子的一般性方法。可以写出简单的替换方法&#xff0c;但是该方法会…

【Flask开发实战】项目介绍-防火墙规则查询系统

一、前言 硬件防火墙为常备主用网络安全设备&#xff0c;主要通过网络访问控制方式实现安全防护。 不同厂家防火墙的网络访问控制功能均采用同样的模式操作&#xff1a;防火墙配置若干条防火墙规则&#xff0c;当IP包到来&#xff0c;防火墙根据包的五元组属性&#xff08;协…

突破编程_前端_JS编程实例(工具栏组件)

1 开发目标 工具栏组件旨在模拟常见的桌面软件工具栏&#xff0c;所以比较适用于 electron 的开发&#xff0c;该组件包含工具栏按钮、工具栏分割条和工具栏容器三个主要角色&#xff0c;并提供一系列接口和功能&#xff0c;以满足用户在不同场景下的需求&#xff1a; 点击工具…