【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.hqwc.cn/news/545025.html

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

相关文章

MySQL:SQL优化

1. 插入优化 使用insert语句单条单条数据插入效率偏低,建议使用insert批量插入数据,批量控制在500-1000条数据较为合适,当面对数以百万的数据时,可以使用load指令,提升插入数据效率 相关指令 #客户端连接服务端加上参…

哔哩哔哩后端Java一面

前言 作者:晓宜 个人简介:互联网大厂Java准入职,阿里云专家博主,csdn后端优质创作者,算法爱好者 最近各大公司的春招和实习招聘都开始了,这里分享下去年面试B站的的一些问题,希望对大家有所帮助…

稀碎从零算法笔记Day19-LeetCode:相交链表

题型:链表基本操作 链接:160. 相交链表 - 力扣(LeetCode) 来源:LeetCode 题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&…

AI - 支持向量机算法

🧨概念 支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,主要用于解决二分类问题。 SVM的核心思想是找到一个超平面,这个超平面能够最好地将数据分为两类,即在保证分类准确的情况下&am…

AcWing 2. 01背包问题

题目描述 解题思路: 相关代码: import java.util.Scanner; public class Main {public static void main(String[] args){Scanner scanner new Scanner(System.in);/** 背包问题的物品下标最好从1开始。* *//*定义一f[i][j]数组,i表示的…

Go——运算符,变量和常量,基本类型

一.运算符 Go语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 1.1 算术运算符 注意:(自增)和--(自减)在go语言中是单独的语句,并不是运算符。 1.2 关系运算符 1.3 逻辑运算符 1.4 位运算符 位运算符对整数在内存…

202206青少年软件编程(图形化) 等级考试试卷(二级)

青少年软件编程(图形化) 等级考试试卷(二级)2022年6月 第1题:【 单选题】 角色初始位置如图所示,下面哪个选项能让角色移到舞台的左下角? ( ) A: B: C: D: 【正确答案】: C 【试题解析】 : 舞台的左下角, 坐标 x 为负数, 坐标 y 为负数, 故应该使用移…

在pzp203上运行ad9361 no-os工程

0. 环境 - pzp203 - ubuntu18 vivado2018 pzp203是一款plutosdr的国产兼容版。出厂默认是基于linux系统的,用libiio调用。软硬件兼容adalm-pluto。开发板提供网盘资料,是添加了板卡适配的。 1. hdl 1.1 准备源码 hdl https://github.com/analogdevi…

白话模电:3.三极管(考研面试与笔试常考问题)

一、三极管的简单判断 1.判断三极 1)给了图 左边是b,有箭头是e,剩下是c 2)给了电位 b:中间值,e:较近值(离中间值),c:较远值(离中间值) 2.判断流向 bc同向(共同流向“|”或共同流离“|”),e与bc反向 3.判断材料 4.判断类型 5.判断能否构…

15 顶级的免费 SD 卡恢复软件来恢复丢失的数据

查看顶级 SD 卡恢复软件。比较功能并选择最好的免费或付费存储卡数据恢复软件: SD 卡是一种方便的小硬件,可用于存储数据。了解这些设备在首次推出几十年后仍然如此受欢迎是一件很有趣的事情。尽管我们可以使用其他可以说是更好的替代品,但它…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextPicker)

滑动选择文本内容的组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TextPicker(options?: {range: string[] | string[][] | Resource | TextPickerRangeContent[] | Te…

python副业兼职手段有哪些

经过多年的总结,鄙人发现python是最适合做兼职副业的编程语言,无论是国内还是国外,对python的需求非常大,python简直就是万能语言。Python副业兼职手段有以下几种: 兼职处理数据:Excel整理数据功能虽然很强…