自学内容网 自学内容网

JBDC入门学习

一、概述

1. 什么是 JDBC?

  JDBC(Java Database Connectivity)是 Java 提供的一套用于操作数据库的 API。通过 JDBC,开发者可以使用 Java 代码与各种关系型数据库进行交互,包括执行 SQL 查询、更新数据以及管理事务。

2. JDBC 的核心组成

  • DriverManager:用于加载和管理数据库驱动。
  • Connection:表示与数据库的连接。
  • Statement:用于执行静态 SQL 语句。
  • PreparedStatement:用于执行带参数的预编译 SQL 语句。
  • ResultSet:表示数据库查询的结果集。
  • SQLException:处理 SQL 执行中的异常。

二、入门程序分析

简单的用户查询:

引入依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCDemo {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_database";
        String username = "your_username";
        String password = "your_password";

        try {
            // 加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 建立连接
            Connection connection = DriverManager.getConnection(url, username, password);

            // 创建语句
            Statement statement = connection.createStatement();

            // 执行查询
            String sql = "SELECT * FROM users";
            ResultSet resultSet = statement.executeQuery(sql);

            // 处理结果集
            while (resultSet.next()) {
                System.out.println("User ID: " + resultSet.getInt("id"));
                System.out.println("Username: " + resultSet.getString("username"));
            }

            // 关闭资源
            resultSet.close();
            statement.close();
            connection.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

DriverManager注册驱动详解:

// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException e) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}
注册驱动:
  • 机制:当加载 Driver 驱动类时,会自动运行静态代码块中注册驱动的代码。
  • 说明
    • Class.forName() 这一步操作可以省略。
    • 注册驱动是通过 SPI(Service Provider Interface)机制完成的。
    • 在驱动包的META-INF目录下的配置文件中配置了驱动类的全类名
SPI 机制:
  • 全称:Service Provider Interface
  • 作用:JDK 内置的一种服务提供发现机制,可以轻松的扩展程序(切换实现),实现接口与实现类之间的解耦。

获取数据库连接DriverManager.getConnection:

  通过 DriverManager.getConnection(url, user, password) 方法获取数据库连接

// 建立连接
String url = "jdbc:mysql://localhost:3306/your_database";
Connection connection = DriverManager.getConnection(url, username, password);

语法

jdbc:mysql://<ip地址或域名>:<端口号>/<数据库名>?<参数键值对1>&<参数键值对2>

Connection & Statement:

// 建立连接
Connection connection = DriverManager.getConnection(url, username, password);

Connection 的作用:获取执行 SQL 的对象

  1. 执行普通 SQL 对象connection.createStatement()
  2. 执行预编译 SQL 对象connection.prepareStatement(sql)

Statement 的作用:执行 SQL

  1. 执行 DDL、DML 语句executeUpdate(sql)
    • 如果执行的是 DML 语句(如 INSERTUPDATEDELETE),返回值为 int,表示 DML 语句影响的行数。
  2. 执行 SQL 查询语句executeQuery(sql)
    • 返回值为 ResultSet,其中封装了查询结果。

while (resultSet.next()) {
        System.out.println("User ID: " + resultSet.getInt("id"));
        System.out.println("Username: " + resultSet.getString("username"));
        }

ResultSet(结果集对象)
封装了 DQL 查询语句查询的结果。

  1. next()

    • 将光标从当前位置向前移动一行,并判断当前行是否为有效行。
    • 返回值:
      • true:有效行,当前行有数据。
      • false:无效行,当前行没有数据。
  2. getXxx(…)

    • 获取数据,可以根据列的编号获取,也可以根据列名获取(推荐使用列名)。

PreparedStatement:
 

作用:预编译SQL语句并执行,可以防止SQL注入问题。

SQL注入:通过控制输入来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

通过 PreparedStatement 解决 SQL 注入问题:

1. 获取 PreparedStatement 对象
使用 ? 占位符替代 SQL 语句中的参数值。

PreparedStatement ps = 
connection.prepareStatement("select * from emp where username = ? and password = ?");
           
// 创建 PreparedStatement 对象
PreparedStatement ps = connection.prepareStatement(sql);
// 设置占位符的值
ps.setString(1, inputUsername); // 设置第一个 ? 为用户名
ps.setString(2, inputPassword); // 设置第二个 ? 为密码
// 执行查询
ResultSet resultSet = ps.executeQuery();

预编译SQL的优势:

1. 安全(防止SQL注入)

2. 性能更高

三、总结

JDBC(Java Database Connectivity)是一种 Java API,用于连接和操作数据库。通过 JDBC,我们可以在 Java 程序中实现对数据库的增删改查操作。


原文地址:https://blog.csdn.net/zzb1580/article/details/143884515

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!