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

news2024/11/16 3:25:53

目录

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

二、什么是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.执行sql
        int 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.coloradmin.cn/o/1534632.html

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

相关文章

揭秘爆红AI图像增强神器:Magnific AI如何做到1亿像素放大?

最近有个很火的AI图像增强应用,叫Magnific AI。 你知道吗,它发布一个多月就有40万人注册了! 这个应用确实非常实用,它不仅利用AI技术放大了图像,还能提升分辨率,从而使图片呈现得更加清晰。 值得一提的是…

观后感-华为中国合作伙伴大会2024

非常荣幸能够参加华为中国合作伙伴大会 2024。以往我参加的会议多数是由政府单独举办的,然而这次进入会场后,我第一感觉就是无比震撼。我从未想过一家企业竟能举办如此规模宏大的会议,当我签到的时候才发现,自己已经是两万多名参会…

环境变量配置

举一个小例子来演示一下环境变量配置。 在CMD中打开QQ界面,首先需要知道QQ.exe文件的完整路径。一旦有了这个路径,可以按照以下步骤操作: 打开CMD窗口。可以通过按下Windows键R,输入“cmd”并回车来打开它。在CMD窗口中&#xf…

2024年语言艺术、人文发展与教育国际会议(ICLAHDE2024)

2024年文学、历史与艺术设计国际会议(ICLHAD2024) 一、【会议简介】 2024年国际语言艺术、人文发展与教育会议(ICLAHDE2024)将在中国昆明举行,主题为“语言、人文与艺术”。ICLAHDE汇集了来自世界各地语言艺术、人类发展和教育领域的学者、工…

图书推荐|图解算法:C语言实现+视频教学版

零负担理解数据结构及其算法的设计,零基础也能快速上手编程。 本书内容 《图解算法:C语言实现视频教学版》是一本综合讲述数据结构及其算法的入门书,力求简洁、清晰、严谨、且易于学习和掌握。 《图解算法:C语言实现视频教学版》…

【系统架构师】-第6章-数据库设计基础知识

1、三级模式-两级映像 外模式:视图、用户与数据库的接口 概念模式:表 内模式:存储方式,索引创建等 1)外模式-模式映射: 视图与表的映射,表数据发生修改,只需要修改映射&#xf…

淘宝店铺如何从1688一键铺货?官方授权API接口,可满足多样化上货需求

那么新手卖家如何将1688的源头厂货一键铺货到淘宝店铺呢?下面我教大家几招: 1、通过淘宝复制一键复制上货 淘宝API接口采集 taobao.item_get 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretStr…

销售数据分析怎么做?用好这5个数据分析方法与模型就足够了。

企业经营其实简单来说就是做买卖,有了买卖自然就产生了销售数据,那怎么能让这些销售数据产生价值呢?答案就是数据分析。通过对销售数据的分析,可以帮助企业及时洞察市场动向,发现企业销售过程中的问题,调整…

用户行为分析是什么?为什么我们需要 bitmap?

本文非常好:https://blog.bcmeng.com/post/doris-bitmap.html meta搜也非常好:https://metaso.cn/ 用户行为分析是什么?简单说,就是围绕全体用户,做各种分析。用户就是一个个的 id。id 在不同方面有各种行为记录&…

c语言--字符转换函数(tolower、toupper.)

目录 一、前言二、使用举例 一、前言 C语⾔提供了2个字符转换函数&#xff1a; int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写 int toupper ( int c ); //将参数传进去的⼩写字⺟转⼤写二、使用举例 #include <ctype.h> #include<stdio.h> int main(…

母亲的奶牛(蓝桥杯,acwing每日一题)

题目描述&#xff1a; 农夫约翰有三个容量分别为 A,B,C升的挤奶桶。 最开始桶 A 和桶 B 都是空的&#xff0c;而桶 C 里装满了牛奶。 有时&#xff0c;约翰会将牛奶从一个桶倒到另一个桶中&#xff0c;直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。 这一过程中间不能有…

LeetCode刷题记录:(12)全排列2

leetcode传送通道 class Solution {List<List<Integer>> result new ArrayList<>();List<Integer> path new ArrayList<>();boolean[] used;public List<List<Integer>> permuteUnique(int[] nums) {used new boolean[nums.lengt…

Java代码基础算法练习-求一个三位数的各位平方之和-2024.03.21

任务描述&#xff1a; 输入一个正整数n&#xff08;取值范围&#xff1a;100<n<1000&#xff09;&#xff0c;然后输出每位数字的平方和。 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;public class m240321 {public …

OpenCV4.9.0开源计算机视觉库安装教程

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 引言&#xff1a;OpenCV系列文章中的安装部分今天全部完成了&#xff0c;为了读者更方便阅读&#xff0c;大家可以按下列索引前往&#xff0c;成文较为仓促有错漏在所难免&#xff0c;欢迎大家指正…

CircuitBreaker熔断器

CircuitBreaker熔断器 1、Hystrix目前也进入维护模式 ​ Hystrix是一个用于处理分布式系统的延迟和容错的开源库&#xff0c;在分布式系统里&#xff0c;许多依赖不可避免的会调用失败&#xff0c;比如超时、异常等&#xff0c;Hystrix能够保证在一个依赖出问题的情况下&…

Uibot6.0 (RPA财务机器人师资培训第2天 )采购付款——网银付款机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981(本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff0…

关于IP地址的查询方法

IP全称Internet Protocol&#xff0c;即互联网协议&#xff0c;是一种网络通信协议&#xff0c;主要用于实现网络互连和设备之间的通信。它规定了计算机在因特网上进行通信时应当遵守的规则&#xff0c;使得不同设备之间能够互相识别、连接和交换信息。IP地址则是IP协议提供的一…

【UE5】动画蒙太奇简述

项目资源文末百度网盘自取 动画蒙太奇基本功能 动画蒙太奇&#xff08;Animation Montage&#xff09; 可以将多个 动画序列&#xff08;Animation Sequences&#xff09; 合并为单个资产并通过蓝图播放&#xff0c;还可以将一个蒙太奇动画切分为多个 蒙太奇分段&#xff08;M…

如何实现RPC调用框架底层代码,并用Java写一个RPC调用案例

RPC&#xff08;Remote Procedure Call&#xff09;是一种远程调用的通信模式&#xff0c;通过网络将请求发送到远程服务器上并获取返回结果。在分布式系统中&#xff0c;RPC可以方便地实现不同机器之间的函数调用&#xff0c;简化了分布式系统的开发和维护工作。 本文将介绍如…

十九、网络编程

目录 一、什么是网络编程二、网络编程三要素2.1 IP2.2 InetAddress的使用2.3 端口号2.4 协议 三、UDP通信程序3.1 发送数据3.2 接收数据3.3 练习 四、UDP的三种通信方式五、TCP的通信程序六、三次握手和四次挥手七、练习7.1 TCP通信练习1——多发多收7.2 TCP通信练习2——接收和…