MySQL的JDBC编程详解

2025-09-14 11:50

本文主要是介绍MySQL的JDBC编程详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教...

前言

本文介绍了mysql数据库的JDBC操作流程,包括前置知识、写操作和读操作的实现步骤。

内容涵盖:

  • 1)如何创建Maven项目并引入MySQL依赖;
  • 2)URL格式解析;
  • 3)JDBC写操作流程(创建数据源、建立连接、构造SQL、执行更新、释放资源);
  • 4)使用PreparedStatement防止SQL注入;
  • 5)JDBC读操作流程(执行查询、处理ResultSet结果集)。

文章通过代码示例详细演示了插入、查询等基本操作,并强调了资源释放的顺序和SQL语句参数化的安全性考虑。

一、前置知识

1. 引入依赖

创建 Maven 项目,同时在 Maven Respository 中找到 MySQL 的依赖,在 Maven 项目中引入;

    <dependencies>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-Java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
    </dependencies>

2. 认识 url

url 是资源在网路上的位置;

以下面 url 为例:

jdbc:mysql://127.0.0.1:3306/myjdbc?characterEncoding=utf8&useSS=false

  • jdbc:mysql 表示 url 的作用,是给 jdbc 操作 mysql 的;
  • 127.0.0.1 表示 IP 地址,描述网络上主机所在的位置;
  • 3306 表示端口号,代表操作网络的应用程序;
  • myjdbc 表示数据库名;
  • characterEncoding=utf8 指定字符集为 utf8;
  • useSS=false 表示设置为不加密
  • ? 前面表示资源,后面表示访问资源的参数;
  • & 表示参数间的分隔符,多个参数使用这个符号分割;

二、JDBC 操作流程

1. JDBC 的写操作

1. 创建数据源,设置好 url,用户名和密码;

2. 建立和数据库服务器的连接;

3. 构造 sql,使用 JDBC 操作数据库仍然需要手动构造 sql;

  • 构造完 sql 之后需要预处理 sql 语句,目的是检查 sql 编写是否正确,避免直接发给服务器,导致服务器报错,浪费服务器资源;
  • 除了检查 sql 是否正确,还会解析 sql 得到结构化的数据,直接把解析好的结构化数据发给数据库服务器,服务器就省下了这部分解析的工作;

4. 把 sql 发给服务器,服务器返回受到影响的行数;

5. 关闭连接,释放资源;先获得的资源后释放,后获得的资源先释放;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

// 在数据库中插入数据
public class Demo1 {
    public static void main(String[] args) throws SQLException {
        // 1. 创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/myjdbc?characterEncoding=utf8&useSSL=false");

        //    设置用户名和密码
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        // 2. 建立和数据库服务器之间的连接
        Connection connection = dataSource.getConnection();

        // 3. 构造 sql
        String sql = "insert into studenlrwRYKeuSt values(1, '张三')";
        //    预处理 sql 语句
        PreparedStatement statement = connection.prepareStatement(sql);
        
        // 4. 把 sql 发给服务器
        int n = statement.executeUpdate();

        // 5. 关闭连接,释放资源
        statement.close();
        connection.close();
    }
}

更新和删除记录的操作和插入的操作步骤相同,只需要更改 sql 语句;

注意:

为了解决 sql 写死的问题,代码中的 sql 是可以拼接参数的;

但是字符串中拼接上参数,容易被注入 sql 攻击,为了避免被注入 sql,可以使用占位符 “?”,再调用 PreparedStatement 的 setInt(), setString() 等方法进行替换;

        // 3. 构造 sql
        //String sql = "insert into student values(" + id + ", '" + name +"')";
        String sql = "insert into student values (?, ?)";
        //    预处理 sql 语句 - 检查 sql 是否存在问题
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);

2. JDBC 的读操作

读操作和写操作的主要区别:

1. sql 语句:需要编写查询语句;

2. 执行 sql 的方法:executeQuery();

3. 执行 sql 语句的返回值:返回的结果集的类型为 ResultSet;

  • ResultSet 默认指向第 0 行记录的前一个位置,调用 next() 方法,才会指向第 0 行记录;
  • 如果 next() 指向的地方有数据记录,返回 true,否则返回 false;

4. 获取数据记录的列需要使用 getInt(),getString() 等方法,取决于列的数据类型,括号中填写要获取临时表的列名,如果使用别名,就写别名;

5. 关闭资源时,要注意关闭 ResultSet,因为编程 ResultSet 是最后打开的,因此要最先关闭;

China编程
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

// jdbc 查询
public class Demo2 {
    public static void main(String[] args) throws SQLException {
        // 1. 创建数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/myjdbc?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        // 2. 建立连接
        Connection connection = dataSource.getConnection();

        // 3. 编写 sql 语句
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        // 4. 执行http://www.chinasem.cn sql 语句
        ResultSet resultSet = statement.executeQuery();

        // 5. 遍历结果集合
        //    通过 next() 方法,可以获取临时表的每一行数据,执行到最后一行的下一行会返回 false
        while(resultSet.next()){
            int id = relrwRYKeuSsultSet.getInt("id");
            String name = resultSet.getString("name");

            System.out.println("id = " + id + ", name = " + name);
        }

        // 6. 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

 注意:读操作同样可以使用占位符,后续用变量去替换;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程China编程(www.chinasem.cn)。

这篇关于MySQL的JDBC编程详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155915

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash