JDBC入门和使用

        Java Database Connectivity(JDBC)是用于在Java应用程序中连接和操作数据库的API。它允许Java程序与各种关系型数据库进行交互,如MySQL、Oracle、PostgreSQL等。下面详细介绍JDBC的一些重要概念和常用方法。

一、JDBC 概述

        JDBC API 提供了一种标准方法,使得Java应用程序可以通过SQL访问数据库。它包含两个核心部分:

        1、JDBC API:定义了Java程序如何访问数据库的接口。

        2、JDBC Driver:实现了JDBC API,每个数据库厂商都需要提供自己的JDBC驱动程序来实现这些接口。

二、常用的 JDBC 类和接口 

        1、DriverManager: 

  • 主要用于管理一组 JDBC 驱动程序。
  • getConnection(String url, String username, String password)用于建立数据库连接。

        2、Connection: 

  • 表示与数据库的连接。
  • createStatement()创建一个 Statement 对象用于执行 SQL 语句。
  • prepareStatement(String sql)创建一个 PreparedStatement 对象,用于执行预编译的 SQL 语句,提高性能和安全性。

        3、Statement

  • 用于执行静态 SQL 语句。
  • executeQuery(String sql)执行查询操作,返回一个 ResultSet 对象。
  • executeUpdate(String sql)执行 INSERT、UPDATE 或 DELETE 操作,返回更新的行数。
  • execute(String sql)执行任何 SQL 语句,返回一个 boolean 值表示是否有结果集。

        4、PreparedStatement: 

  • 继承自 Statement,预编译 SQL 语句,提高执行效率,防止 SQL 注入攻击。
  • setXXX(int parameterIndex, XXX value)为预编译的 SQL 语句设置参数,例如 setStringsetInt 等方法。

        5、ResultSet

  • 表示查询结果集。
  • next()将光标移动到下一行,并返回是否存在下一行。
  • getString(int columnIndex)getInt(int columnIndex) 等方法用于获取当前行的列数据。

三、JDBC 使用流程 

        1、加载数据库驱动:使用 Class.forName(driverClassName) 加载数据库驱动。

        2、建立连接:使用 DriverManager.getConnection(url, username, password) 建立数据库连接。

        3、创建Statement或PreparedStatement:根据需求创建 Statement PreparedStatement 对象。

        4、执行SQL语句:通过 executeQueryexecuteUpdate 等方法执行 SQL 操作。

        5、处理结果:通过 ResultSet 获取查询结果并进行处理。

        6、释放资源:在不再需要时关闭 ResultSetStatementConnection 等对象,释放数据库连接。

import java.sql.*;

public class JDBCTest {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try {
            // 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            // 建立连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "123456");
            
            // 创建 Statement
            stmt = conn.createStatement();
            
            // 执行查询
            rs = stmt.executeQuery("SELECT * FROM users");
            
            // 处理结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println("id: " + id + ", name: " + name);
            }
            
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

四、JdbcTemplate  

    JdbcTemplate 是 Spring 框架中用于简化 JDBC 操作的重要类,它封装了常见的 JDBC 操作,提供了多种方法来执行查询、更新和批处理等操作。以下是 JdbcTemplate 常用的方法及其简要说明: 

 1、queryForObject(查询操作) 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public UserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public String findUserNameById(int userId) {
        String sql = "SELECT name FROM users WHERE id = ?";
        String name = jdbcTemplate.queryForObject(sql, String.class, userId);
        return name;
    }
}

2、update(更新操作) 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public UserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void updateUserName(int userId, String newName) {
        String sql = "UPDATE users SET name = ? WHERE id = ?";
        jdbcTemplate.update(sql, newName, userId);
    }
}

3、batchUpdate(批量更新) 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

@Repository
public class UserRepository {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public UserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void insertUsers(List<User> users) {
        String sql = "INSERT INTO users (id, name) VALUES (?, ?)";
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                User user = users.get(i);
                ps.setInt(1, user.getId());
                ps.setString(2, user.getName());
            }

            @Override
            public int getBatchSize() {
                return users.size();
            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真真假假々

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值