JDBC基本使用

一、准备环境

开发工具:IDEA
jdk版本: 8+ (jdk13)
数据库:MySQL 5+ (mysql 8)
所需JAR包:数据库驱动jar包(mysql-connector-java-5.1.49.jar)


  1. 在IDEA中创建一个空项目(或者模块)

    • 以创建空项目为例,以此点击:
      File ——> New ——> Project ——> 选择左角的Empty Project ——> 在右上选择SDK ——> 点击NEXT ——> 给项目命名,如:JDBC ——> FINISH
  2. 在项目中创建一个JAVA模块

    File ——> New ——> Module ——> 选择左角的Java ——> 在右上选择SDK ——> 点击NEXT ——> 给模块命名,如:BaseOption ——> FINISH
    此时模块的结构为:

BaseOption
      |__ BaseOption.iml
      |__ src

二、JDBC入门

2.1创建lib目录

在**BaseOption**下创建**lib**文件夹

2.2导入JAR包

- 将JAR包(mysql-connector-java-5.1.49.jar)复制到**lib**目录下

- 右键jar包——>**Add as library**——>**OK**

2.3编写JDBC工具类

  1. 在src下创建相应的包(如,cn.langkye.utils)

  2. 在utils下新建类(JDBCUtil)

  3. 编写获取数据库连接和释放资源的代码

package com.langkye.utils;

import org.junit.Test;

import java.sql.*;

/**
 * @Author: langkye
 * @Date: 2020/6/22
 * @version: 1.0
 * @Lisence: Created with IntelliJ IDEA.
 * @Description: JDBCUtil
 */
public class JDBCUtil {
    // 连接的数据库地址,数据库名,参数
    private static String url = "jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
    // 数据库用户名
    private static String username = "root";
    // 当前用户密码
    private static String password = "langkye";
    // mysql驱动位置
    private static String driver = "com.mysql.jdbc.Driver";

    // 加载并数据库驱动
    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取数据库连接
     * @return conn 数据库连接对象
     */
    public static Connection getConnection(){
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url,username,password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return conn;
    }

    /**
     * 释放资源
     * @param rs 查询结果集
     * @param stmt sql执行对象
     * @param conn 数据库连接对象
     */
    public static void close(ResultSet rs,Statement stmt,Connection conn){
        /* 按照从小到大释放资源 */
        // 释放结果集
        if (rs!=null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        // 释放sql执行对象
        if (stmt!=null) {
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        // 释放数据库连接对象
        if (conn!=null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    // 释放资源
    public static void close(Statement stmt,Connection conn){
        close(null,stmt,conn);
    }
    // 释放资源
    public static void close(Connection conn){
        close(null,conn);
    }

    // 测试数据库连接
    @Test
    public void TestJDBC(){
        Connection conn = JDBCUtil.getConnection();
        if (conn!=null){
            System.out.println("数据库连接成功:" + conn);
            close(conn);
        }
    }
}

2.4使用JDBC操作数据库

package com.langkye.dao;
import com.langkye.utils.JDBCUtil;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDao {

    /**
     * 1. 修改"LinQinXia"用户的年龄为28
     */
    @Test
    public void test1(){
        // 声明
        Connection conn = null;
        PreparedStatement pstmt = null;
        // 1. 获取connection
        conn = JDBCUtil.getConnection();
        //2. 定义sql
        String sql = "update user set age = ? where username = ?";
        //3. 执行sql
        try {
            // 预编译sql,防止SQL注入
            pstmt = conn.prepareStatement(sql);
            // 设置参数
            pstmt.setInt(1,28);
            pstmt.setString(2,"LinQinXia");
            // 执行sql,返回影响行数
            int count = pstmt.executeUpdate();
            System.out.println(count);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            // 释放资源
            JDBCUtil.close(pstmt,conn);
        }
    }

    /**
     * 2. 添加一条记录
     */
    @Test
    public void test2(){
        // 声明
        Connection conn = null;
        PreparedStatement pstmt = null;
        // 1. 获取connection
        conn = JDBCUtil.getConnection();
        // 2. 定义sql
        String sql = "insert into user(username,password,name,age ,birthday,address) values(?,?,?,?,?,?)";
        // 执行sql
        try {
            // 预编译sql
            pstmt = conn.prepareStatement(sql);
            // 设置参数
            pstmt.setString(1,"Tom");
            pstmt.setString(2,"Tom123");
            pstmt.setString(3,"Tom");
            pstmt.setInt(4,22);
            pstmt.setString(5,"2000-02-01");
            pstmt.setString(6,"China");
            // 执行sql,返回影响行数
            int count = pstmt.executeUpdate();
            System.out.println(count);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            // 释放资源
            JDBCUtil.close(pstmt,conn);
        }
    }

    /**
     * 3.查询
     */
    @Test
    public void test3(){
        // 声明
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        // 1. 获取connection
        conn = JDBCUtil.getConnection();
        // 2. 定义sql
        String sql = "select * from user";
        // 执行sql
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while (rs.next()){
                int id = rs.getInt("id");
                String username = rs.getString("username");
                String password = rs.getString("password");
                // ...
                System.out.println(id + "," + username + "," + password);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            // 释放资源
            JDBCUtil.close(rs,pstmt,conn);
        }
    }
}




附录:SQL数据

这里准备了测试所用的sql

/**
  * @Author: Langkye
  * @Description: Test Data
  */

/* ------------>建库<------------ */
# 查看当前数据库
SELECT DATABASE();
# 创建数据库
CREATE DATABASE IF NOT EXISTS db CHARSET = 'utf8';
# 使用数据库
USE db;
/* ------------>建表<------------ */
-- 创建用户表
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
    `id`   INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
    `username` VARCHAR(32) UNIQUE NOT NULL COMMENT '用户名',
    `password` VARCHAR(100) NOT NULL COMMENT '密码',
    `name` VARCHAR(32) NOT NULL COMMENT '姓名',
    `gender`  ENUM ('男','女') DEFAULT '男' COMMENT '性别',
    `age`  INT(3)       NULL COMMENT '年龄',
    `birthday`  DATE      NOT NULL COMMENT '出生日期',
    `address` VARCHAR(100) NULL COMMENT '地址'
)/* AUTO_INCREMENT=1001 */;

-- 查看创建的表
SHOW TABLES;
-- 查看表字段及其属性
SHOW FULL COLUMNS FROM user;
-- 查看表结构
DESCRIBE user;
DESC user;


/* ------------>插入记录<------------ */
-- 插入 [用户] 记录
DELETE FROM user WHERE 1=1;
INSERT INTO user
VALUES
       (NULL,'LinQinXia','admin', '李嘉欣','女', NULL, '1970-05-20', '中国'),
       (NULL,'ZhongLiTi','admin', '钟丽缇','女', NULL, '1970-05-20', '中国'),
       (NULL,'ZhangTing','admin', '张庭','女', NULL, '1970-05-20', '中国'),
       (NULL,'ZhuYin','admin', '朱茵','女', NULL, '1971-05-20', '中国'),
       (NULL,'YuFeiHong','admin', '俞飞鸿','女', NULL, '1971-05-20', '中国'),
       (NULL,'YuanYongYi','admin', '袁咏仪','女', NULL, '1971-05-20', '中国'),
       (NULL,'HongXin','admin', '洪欣','女', NULL, '1971-05-20', '中国'),
       (NULL,'NingJing','admin', '宁静','女', NULL, '1972-05-20', '中国'),
       (NULL,'TaoHng','admin', '陶虹','女', NULL, '1972-05-20', '中国'),
       (NULL,'CaiShaoFen','admin', '蔡少芬','女', NULL, '1973-05-20', '中国'),
       (NULL,'LiBingBing','admin', '李冰冰','女', NULL, '1973-05-20', '中国'),
       (NULL,'ZhouXun','admin', '周迅','女', NULL, '1974-05-20', '中国'),
       (NULL,'WangYan','admin', '王艳','女', NULL, '1974-05-20', '中国'),
       (NULL,'LinZhiLing','admin', '林志玲','女', NULL, '1973-05-20', '中国'),
       (NULL,'JiaJingWeng','admin', '贾静雯','女', NULL, '1973-05-20', '中国'),
       (NULL,'ChenDeRong','admin', '陈德容','女', NULL, '1973-05-20', '中国'),
       (NULL,'HeMeiXi','admin', '何美钿','女', NULL, '1975-05-20', '中国'),
       (NULL,'ZhaoWei','admin', '赵薇','女', NULL, '1976-05-20', '中国'),
       (NULL,'LinXinRu','admin', '林心如','女', NULL, '1976-05-20', '中国'),
       (NULL,'ShuQi','admin', '舒淇','女', NULL, '1976-05-20', '中国'),
       (NULL,'SunLi','admin', '孙莉','女', NULL, '1976-05-20', '中国'),
       (NULL,'DaS','admin', '大S','女', NULL, '1976-05-20', '中国'),
       (NULL,'ChenShu','admin', '陈数','女', NULL, '1976-05-20', '中国'),
       (NULL,'HuangYi','admin', '黄奕','女', NULL, '1976-05-20', '中国'),
       (NULL,'JiangZuPing','admin', '江祖平','女', NULL, '1978-05-20', '中国'),
       (NULL,'ZhangZiYi','admin', '章子怡','女', NULL, '1979-05-20', '中国'),
       (NULL,'GaoYuanYuan','admin', '高圆圆','女', NULL, '1979-05-20', '中国'),
       (NULL,'ChenHao','admin', '陈好','女', NULL, '1979-05-20', '中国'),
       (NULL,'ChenQiaoEn','admin', '陈乔恩','女', NULL, '1979-05-20', '中国')
;
-- 查看记录是否添加成功
SELECT * FROM user;
原文地址:https://www.cnblogs.com/langkyeSir/p/13176262.html