Loading...

java操作MySQL

2025-04-08
3
-
- 分钟
|

java操作MySQL

mysql 概述

在这里插入图片描述

数据模型

在这里插入图片描述

在这里插入图片描述

java 操作数据库

JDBC:使用java语言操作关系型数据库的一套api,但是纯原生比较繁琐还是 框架 ** 规整一些。

在这里插入图片描述

JDBC—入门程序

  • 步骤:
  1. 创建maven项目,引入依赖并准备数据库表user.
  2. 编写jdbc程序并操作数据库

创建一个普通的java 项目 ** 并选择maven。

<!--    引入数据库操作对应的依赖-->
    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.9.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>
    </dependencies>

初步尝试jdbc

package com.huohuo;

import org.junit.Test;

import java.sql.*;

public class jdbcTest {
    @Test // 测试方法
    public void testUpdate() throws Exception {
        // 操作数据库的流程
        // 1。注册驱动, 固定套路
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2.连接数据库
        String url = "jdbc:mysql://localhost:3306/web-01";
        String username = "root";
        String password = "wanghaobo666";
        Connection connection = DriverManager.getConnection(url, username, password);
        // 3.获取sql语句的执行对象
        Statement statement = connection.createStatement();

        // 4.执行sql语句
        int i = statement.executeUpdate("update user set age = 25 where id = 1");
        System.out.println("执行完毕影响的记录数:" + i);
        // 5.释放资源
        statement.close();
        System.out.println("hello");
    }
}

其中注册驱动和建立连接还有释放资源都是固定的套路

查询解析

在这里插入图片描述

@Test
    public void testSelect() throws Exception {
        Connection conn = null;
        PreparedStatement  preparedStatement = null;
        ResultSet resultSet = null;
// 以上三个资源都需要关闭,所以要使用try-catch-finally
        try {
            // 1。注册驱动, 固定套路
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 2.连接数据库
            String url = "jdbc:mysql://localhost:3306/web-01";
            String username = "root";
            String password = "wanghaobo666";
            conn = DriverManager.getConnection(url, username, password);

            String sql = "SELECT id, username, password, name, age FROM user WHERE username = ? AND password = ?";

            preparedStatement = conn.prepareStatement(sql); // 预编译SQL,减少sql执行
            preparedStatement.setString(1, "daqiao"); // 设置占位符的参数username = ? 的
            preparedStatement.setString(2, "123456"); // 设置占位符的参数

            resultSet = preparedStatement.executeQuery(); // 查询的结果集对象是 ResultSet, 可以遍历

            List<User> users = new ArrayList<>();
            while (resultSet.next()) {
                User user = new User(
                        resultSet.getInt("id"),
                        resultSet.getString("username"),
                        resultSet.getString("password"),
                        resultSet.getString("name"),
                        resultSet.getInt("age")
                );
                users.add(user);
                System.out.println(user);
            }
            System.out.println(users);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                conn.close();
            }
            if (preparedStatement != null) {
                preparedStatement.close();
            }
            if (resultSet != null) {
                resultSet.close();
            }
        }
    }
  1. 释放数据库连接资源
  • Connection 对象表示与数据库的物理连接。每次与数据库进行交互时,都会使用一个连接对象。如果连接不关闭,数据库连接池可能会达到最大连接数限制,导致无法创建新的连接,影响系统的正常运行。关闭连接释放了资源,确保连接池中的连接能够被复用。
  1. 释放SQL语句资源
  • PreparedStatement 是执行预编译 SQL 查询的对象,它会在内存中占用一定的资源。如果不关闭,可能会导致内存泄漏或持久化连接池中的资源被浪费。尤其是在执行大量的数据库操作时,长期不关闭 PreparedStatement 对象可能会影响系统性能。
  1. 释放结果集资源
  • ResultSet 对象代表了查询的结果集。在使用完查询结果后,如果不关闭 ResultSet,它将占用数据库服务器和客户端的资源,可能导致内存泄漏,甚至影响查询的并发执行。当查询的结果集包含大量数据时,这种影响尤其明显。

预编译SQL

在查询语句中:

String sql = "SELECT id, username, password, name, age FROM user WHERE username = ? AND password = ?";

            preparedStatement = conn.prepareStatement(sql); // 预编译SQL,减少sql执行
            preparedStatement.setString(1, "daqiao"); // 设置占位符的参数username = ? 的
            preparedStatement.setString(2, "123456"); // 设置占位符的参数

并没有写死,而是使用了?占位符,在执行之前对占位符进行了赋值。这种形式称之为预编译sql

在这里插入图片描述

致谢:本文参考黑马程序员的视频。 https://www.bilibili.com/video/BV1yGydYEE3H/?vd_source=1b8f9bfb1d0891faf1c70d7678ae56db

文章目录