JavaWeb_11_JDBC

《JDBC》

目录

  • JDBC简介(掌握)
  • JDBC操作数据库(熟练)
  • JDBC工具类(掌握)

一、JDBC简介

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

请添加图片描述

驱动jar包下载

  1. 访问maven仓库:https://mvnrepository.com,搜索mysql jdbc,进入mysql-connector-java版本选择界面;

请添加图片描述

  1. 选择与已安装mysql版本对应的最新子版本,点击进入下载界面;

请添加图片描述

  1. 点击jar文件下载链接。

请添加图片描述

执行结果

请添加图片描述

二、JDBC操作数据库

核心步骤

  1. 加载驱动;
  2. 获取数据库连接;
  3. 获取SQL执行器;
  4. 执行SQL并返回结果集;
  5. 关闭资源。

核心API

  • DriverManager:驱动管理器,可创建数据库连接;
  • Connection:数据库连接;
  • Statement:sql执行器;
  • PreparedStatement:预编译sql执行器(效率更高更安全);
    • executeQuery():执行查询,返回结果集;
    • executeUpdate():执行增删改,返回受影响的行数;
  • ResultSet:结果集;
  • ResultSetMetaData:元数据(包含表头信息);

环境准备

  1. 新建Java项目,src目录下新建lib包,将jdbc驱动复制到lib下;

请添加图片描述

  1. 鼠标右键lib包——>Add As Libray…

请添加图片描述

执行结果

请添加图片描述

案例一

package com.hpr.test;

import java.sql.*;

public class JdbcTest {

    //1.加载驱动
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        //url格式(jdbc:mysql://服务器地址:端口/数据库,同时可指定字符集、时区等参数)
        String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimeZone=Asia/Shanghai";
        String username = "root";
        String password = "123456";

        Connection conn;
        try {
            //2.获取连接
            conn = DriverManager.getConnection(url, username, password);

            //3.获取PreparedStatement对象(SQL执行器)
            String sql = "select * from teacher where teacher_id>? and age<?";
            PreparedStatement ps = conn.prepareStatement(sql);
            //参数注入(给sql中?设置值)
            ps.setObject(1, 101);
            ps.setObject(2, 40);

            //4.执行sql返回结果集
            ResultSet rs = ps.executeQuery();

            //处理结果集(如打印输出)
            while (rs.next()) {
                System.out.println(rs.getInt("teacher_id") + "——" + 
                                   rs.getString("teacher_name"));
            }

            //5.资源关闭(倒着关)
            rs.close();
            ps.close();
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

三、JDBC工具类

主要目的:简化步骤,高级封装,方便调用。

  • JdbcUtil
package com.hpr.util;

import java.sql.*;
import java.util.*;

public class JdbcUtil {

    //连接参数
    private static final String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimeZone=Asia/Shanghai";
    private static final String username = "root";
    private static final String password = "123456";

    //1.加载驱动
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 查询方法(将结果集转化为List<Map<String,Object>>)
     *
     * @param sql    要执行的sql
     * @param params 要注入的参数
     * @return 结果集
     */
    public static List<Map<String, Object>> executeQuery(String sql, Object... params) {
        List<Map<String, Object>> result = new ArrayList<>();
        try {
            //2.获取连接
            Connection conn = DriverManager.getConnection(url, username, password);
            //3.获取sql执行器
            PreparedStatement ps = conn.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i + 1, params[i]);
            }
            //4.执行sql,返回结果集
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                //将每条记录转化为一个Map
                Map<String, Object> map = new LinkedHashMap<>();
                //获取表头
                ResultSetMetaData md = rs.getMetaData();
                for (int i = 0; i < md.getColumnCount(); i++) {
                    map.put(md.getColumnName(i + 1), rs.getObject(md.getColumnName(i + 1)));
                }
                //添加到结果集
                result.add(map);
            }
            //5.资源关闭
            rs.close();
            ps.close();
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return result;
    }

    /**
     * 增删改方法(返回受影响的行数)
     *
     * @param sql    要执行的sql
     * @param params 要注入的参数
     * @return 结果集
     */
    public static int executeUpdate(String sql, Object... params) {
        int count = 0;
        try {
            //2.获取连接
            Connection conn = DriverManager.getConnection(url, username, password);
            //3.获取sql执行器
            PreparedStatement ps = conn.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i + 1, params[i]);
            }
            //4.执行sql,返回结果
            count = ps.executeUpdate();
            //5.资源关闭
            ps.close();
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        //判断并返回结果
        return count;
    }
}
  • 测试
public static void main(String[] args) {
    //查询测试
    String sql1 = "select * from teacher where teacher_id>? and age<?";
    List<Map<String, Object>> result = JdbcUtil.executeQuery(sql1, 101, 40);
    result.forEach(System.out::println);

    //新增测试
    //String sql2 = "insert into teacher(teacher_name,age,phone_number) value (?,?,?)";
    //int count = JdbcUtil.executeUpdate(sql2, "F老师", 30, "18829304290");
    //System.out.println(count);
}

总结

重点

  1. JDBC相关概念;
  2. JDBC操作数据库五大步骤;
  3. JDBC工具类。

难点

  1. JDBC工具类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值