一文搞懂JDBC全流程(含MySQL安装和JDK下载)

game365备用网址 📅 2025-08-23 13:22:29 👤 admin 👁️ 6199 ❤️ 909
一文搞懂JDBC全流程(含MySQL安装和JDK下载)

前言:

1.了解

问题1:什么是JDBC?

JDBC全称: Java Database Connectivity,即Java数据库连接

JDBC是Java提供的一组独立于任何数据库管理系统的API。

Java提供接口规范,由各个数据库厂商提供接口的实现,厂商提供的实现类封装成jar文件,也就是数据库驱动jar包。

学习JDBC,充分体现了面向接口编程的好处,程序员只关心标准和规范,而无需关注实现过程。

问题2:为什么需要使用JDBC?

数据库连接:JDBC提供了一个标准接口,使Java应用程序能够与各种关系型数据库(如MySQL、Oracle、PostgreSQL等)进行连接和交互。通过JDBC,开发者可以轻松地执行SQL查询和更新操作。

跨平台性:由于Java是一个跨平台的编程语言,JDBC也继承了这一特性。无论是开发在Windows、Linux还是macOS上的应用程序,JDBC都能提供一致的数据库访问体验。

标准化:JDBC为不同的数据库提供了一个统一的访问方式。无论使用什么样的数据库,只需通过JDBC接口,开发者就可以使用相同的代码逻辑与之交互,降低了学习成本。

性能优化:JDBC支持批处理操作,使得多个SQL语句可以在一个请求中发送到数据库,减少网络延迟,提高性能。

JDBC 的简单执行流程图:

2.准备

开始前的准备工作

1.准备数据库

MySQL8.x或者MySQL5.x都可以

下载网址:https://www.mysql.com/downloads/

进入网址下滑找到并点击:

跳转后点击:

进入下载界面,请选择本地下载:

后续安装操作:https://blog.csdn.net/weixin_39289696/article/details/128850498

2.官网下载数据库连接驱动jar包。

网址:https://downloads.mysql.com/archives/c-j/

提示:8.0.25以后的驱动不需要设置时区(即后面都可)

3.创建Java项目(JDK21)

JDK的下载:

4.在项目下创建lib文件夹,将下载的驱动jar包复制到文件夹里

5.选中lib文件夹右键->Add as Library(创建库),与项目集成。

6.简单感受编写的场景

package com.atguigu.base;

import java.sql.*;

public class JDBCQuick {

public static void main(String[] args) throws Exception {

//注册驱动

//带有cj是sql8.x的,不使用的是sql5.x

Class.forName("com.mysql.cj.jdbc.Driver");

//获取驱动信息

//company:为创建的数据库的名称

String url = "jdbc:mysql://localhost:3306/company";

String username = "root";

String password = "123456";

Connection connection = DriverManager.getConnection(url, username, password);

//连接执行SQL语句的对象,使用Statement的场景

Statement statement = connection.createStatement();

//编写SQL语句,并执行,接收返回的结果集

String sql = "SELECT emp_id,emp_name,emp_salary,emp_age FROM t_emp;";

ResultSet resultSet = statement.executeQuery(sql);

//处理结果,遍历resultSet结果集

while (resultSet.next()) {

int empId = resultSet.getInt("emp_id");

String empName = resultSet.getString("emp_name");

Double empSalary = resultSet.getDouble("emp_salary");

int empAge = resultSet.getInt("emp_age");

System.out.println(empId + "\t" + empName + "\t" + empSalary + "\t" + empAge);

}

//关闭资源,抬头法:从下往上

resultSet.close();

statement.close();

connection.close();

}

}

一、基础篇

1.五大核心API

1.1 注册驱动

格式:

Class.forName("com.mysql.cj.jdbc.Driver");

DriverManager.registerDriver(new Dirver());

在Java中,使用JDBC连接数据库时,需要加载特定的数据库驱动程序以便与之通信。加载驱动程序是为了注册驱动程序,使JDBC API能识别并与特定数据库交互。

从JDK6开始,只要将对应的JAR文件放在类路径中,就无需显式调用 class.forName() 来加载驱动程序,驱动程序会在初始化时自动注册。

1.2 Connection

Connection接口是JDBC API的重要接口,用于建立与数据库的通信通道。换而言之,connection对象不为空,则代表一次数据库连接。

在建立连接时,需要指定数据库URL、用户名、密码参数。

URL:jdbc:mysql://localhost:3306/company

"jdbc:mysq!://IP地址:端口号/数据库名称?参数键值对1&参数键值对2

Connection 接口还负责

管理事务,Connection,接口提供了 commit 和 rollback 方法,用于提交事务和回滚事务。

可以创建 statement 对象,用于执行 SQL语句并与数据库进行交互,

在使用JDBC技术时,必须要先获取Connection对象,在使用完毕后,要释放资源,避免资源占用浪费及泄漏。

1.3 Statement

Statement 接口用于执行 SQL语句并与数据库进行交互。

通过Statement 对象,可以向数据库发送 SQL语句并获取执行结果。结果可以是一个或多个结果。

增删改:受影响行数单个结果。

查询:单行单列、多行多列、单行多列等结果。

注意:

statement 接口在执行SQL语句时,会产生 SQL注入攻击问题:

原因:当使用 Statement 执行动态构建的 SQL查询时,往往需要将查询条件与 SQL语句拼接在一起,直接将参数和SQL语句一并生成,让SQL的查询条件始终为true得到结果。

例子:

输入的是abc' or '1' = '1,却返回表中全部数据

1.4 PreparedStatement

PreparedStatement是 statement 接口的子接口,用于执行 预编译 的 SQL 查询

作用如下

预编译SQL语句:在创建PreparedStatement时,就会预编译SQL语句,也就是SQL语句已经固定。

防止SQL注入: PreparedStatement 支持参数化查询,通过使用 ? 占位符将数据作为参数传递到SQL语句中。传入的参数会自动用单引号包裹,从而有效防止SQL注入问题。

性能提升:Preparedstatement是预编译SQL语句,同一SQL语句多次执行的情况下,可以复用,不必重新编译和解析。

例子:

相同的情况使用preparedStatement的结果,并不会返回所有值

因为 ?占位符会给写进去的‘ ’ 当成值传递 即 abc' or '1' = '1会变成: 'abc\' or \'1\' = \'1'

1.5 ResultSet

ResultSet 是 JDBCAPI 中的一个接口,用于表示从数据库中 执行査询语句所返回的结果集。它提供了一种用于遍历和访问查询结果的方式。

遍历结果:Resultset可以使用 next()方法将游标移动到结果集的下一行,逐行遍历数据库查询的结果,返回值为boolean类型,true代表有下一行结果,false则代表没有。

获取单列结果:可以通过getxxx的方法获取单列的数据,该方法为重载方法,支持索引和列名进行获取

代码使用实例:

package com.atguigu.base;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

import java.util.Scanner;

public class JDBCQuick1 {

public static void main(String[] args) throws Exception {

Connection connection = DriverManager.getConnection("jdbc:mysql:///company","root","123456");

//连接执行SQL语句的对象,使用Statement的场景,由于存在sql注入的问题,开发中不适用

/*Statement statement = connection.createStatement();

String sql = "SELECT emp_id,emp_name,emp_salary,emp_age FROM t_emp WHERE emp_name = '"+name+"'";

ResultSet resultSet = statement.executeQuery(sql);*/

//使用PreparedStatement的场景,由于是预编译的语句,后续不用在创建sql执行的语句,而是直接执行并返回结果即可

PreparedStatement preparedStatement = connection.prepare

相关推荐

ps如何做出圆角边框?
game365备用网址

ps如何做出圆角边框?

📅 08-07 👁️ 470
​收到转账支票如何进账
365050

​收到转账支票如何进账

📅 07-17 👁️ 8115
格力手机2代上架京东 售价比定价贵299
365足球打水封号还严重嘛

格力手机2代上架京东 售价比定价贵299

📅 07-29 👁️ 2077