JDBC简单实操

文章内容输出来源:拉勾教育JAVA就业训练营
总目录跳转链接:总目录
如有侵权请联系本人
邮箱:xiaogueika@tom.com

一、JDBC 概述

1. 什么是JDBC(Java 访问数据库的标准规范)

JDBC(Java Data Base Connectivity) ,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是 Java 访问数据库的标准规范

在这里插入图片描述

总结:

JDBC就是由sun公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库驱动jar包, 我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。

二、JDBC开发(MySql)

1. MySql驱动包

这一步都不会的话参考百度:idea导入驱动包

2.1 API使用: 注册驱动

JDBC规范定义驱动接口: java.sql.Driver
MySql驱动包提供了实现类: com.mysql.jdbc.Driver

加载注册驱动的方式描述
Class.forName(数据库驱动实现类)加载和注册数据库驱动,数据库驱动由数据库厂商MySql提供
com.mysql.jdbc.Driver

代码示例:

public class JDBCDemo01 {
	public static void main(String[] args) throws ClassNotFoundException {
		//1.注册驱动
		// forName 方法执行将类进行初始化
		Class.forName("com.mysql.jdbc.Driver");
	}
}

应该没人会弱智到问我为什么要注册驱动吧,暂时我先不写,如果真的需要的话,请私信我添加
个人感觉JDBC这块,会用就够了。

2.2 API使用: 获得连接

  • Connection 接口,代表一个连接对象 ,具体的实现类由数据库的厂商实现
  • 使用 DriverManager类的静态方法,getConnection可以获取数据库的连接
获取连接的静态方法说明
Connection getConnection(String url,
String user,String password)
通过连接字符串和用户名,密码来获取数据库连接对象
  1. getConnection方法 3个 连接参数说明

    连接参数说明
    user登录用户名
    password登录密码
    urlmySql URL的格式
    jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8
  2. 对URL的详细说明
    JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。

    • 第一部分是协议 jdbc,这是固定的;

    • 第二部分是子协议,就是数据库名称,连接mysql数据库,第二部分当然是mysql了;

    • 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost),端口号(3306),以及要使用的数据库名称组成。
      在这里插入图片描述
      代码示例:

      public class JDBCDemo02 {
      	public static void main(String[] args) throws Exception {
      		//1.注册驱动
      		Class.forName("com.mysql.jdbc.Driver");
      		//2.获取连接 Connection 连接对象
      		tring user = "root";   //账户
              String password = "root";   //密码
      		String url = "jdbc:mysql://localhost:3306/db4";
      		Connection con = DriverManager.getConnection(url, user, password);
      		//com.mysql.jdbc.JDBC4Connection@2e3fc542
      		System.out.println(con);
      	}
      }
      

2.3 API 使用: 获取语句执行平台

  • 通过ConnectioncreateStatement方法 获取sql语句执行对象
Connection接口中的方法说明
Statement createStatement()创建 SQL语句执行对象

Statement : 代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结果的对象。

Statement类 常用方法说明
int executeUpdate(String sql);执行insert update delete语句.返回int类型,代表受影响的行数
ResultSet executeQuery(String sql);执行select语句, 返回ResultSet结果集对象

代码示例:

/*----------------------------------前面代码补充上----------------------------------*/
        //3.获取语句执行平台 Statement 对象
        Statement statement = con.createStatement();
        //4.执行创建表操作
        String sql = "create table test(id int,name varchar(20),age int)";
        //5.增删改操作 使用executeUpdate,增加一张表
        int i = statement.executeUpdate(sql);
        //6.返回值是受影响的函数
        System.out.println(i);
        //7.关闭流
        statement.close();
        con.close();

2.4 API 使用:处理结果集(ResultSet)

只有在进行查询操作的时候, 才会处理结果集
ResultSet接口
作用:封装数据库查询的结果集,对结果集进行遍历,取出每一条记录。

ResultSet接口方法说明
boolean next()1) 游标向下一行
2) 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false
xxx getXxx( String or int)1) 通过列名,参数是 String 类型。返回不同的类型
2) 通过列号,参数是整数,从 1 开始。返回不同的类型

代码示例:

package com.cyh.demo01;

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

public class JDBCDemo02 {
    public static void main(String[] args) throws Exception {

        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2.获取连接 connection连接对象
        String user = "root";   //账户
        String password = "root";   //密码
        String url = "jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8"; //url
        Connection con = DriverManager.getConnection(url, user, password);
        
        //3.获取语句执行平台 Statement 对象
        Statement statement = con.createStatement();
        //4.执行查询操作
        String sql = "select * from jdbc_user;";
        //5.查询操作 使用executeUpdate,增加一张表
        ResultSet resultSet = statement.executeQuery(sql);
        //6.返回值是受影响的函数
        while(resultSet.next()){
            //获取id
            int id = resultSet.getInt("id");
            //获取姓名
            String username = resultSet.getString("username");
            //获取生日
            Date birthday = resultSet.getDate("birthday");
            System.out.println(id + " = " + username + " : " + birthday);
        }

        //7.关闭流
        statement.close();
        con.close();
    }
}

2.6 步骤总结

  1. 获取驱动(可以省略)
  2. 获取连接
  3. 获取Statement对象
  4. 处理结果集(只在查询时处理)
  5. 释放资源(被我吃了(不想写))

二、JDBC实现增删改查

1. 创建JDBC工具类

package com.cyh.utils;

import java.sql.*;

/**
 * JDBC 工具类
 */
public class JDBCUtils {
    /**
     * 将连接信息定义为字符串常量
     */
    /**
     * 驱动类
     */
    public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
    /**
     * URL
     */
    public static final String URL = "jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8";
    /**
     * 数据库账号
     */
    public static final String USER = "root";
    /**
     * 数据库密码
     */
    public static final String PASSWORD = "root";

    /**
     * 静态代码块,随着类的加载而加载	
     * 注册驱动
     */
    static {
        try {
            Class.forName(DRIVERNAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接的静态方法
     * @return  Connection
     */
    public static Connection getConnection(){
        try {
            //获取连接对象  并返回
            return DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 增删改的关闭资源的方法
     * @param con
     * @param statement
     */
    public static void  Close(Connection con, Statement statement){
        if (null != statement){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (null != con){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 查询操作的关闭资源的方法
     * @param con
     * @param statement
     * @param resultSet
     */
    public static void  Close(Connection con, Statement statement, ResultSet resultSet){
        if (null != resultSet){
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (null != statement){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (null != con){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

2. 增删查改示例:

package com.cyh.jdbc02;

import com.cyh.utils.JDBCUtils;
import org.junit.Test;

import java.sql.*;

public class TestDML {
    /**
     * 添加操作
     * @throws SQLException
     */
    @Test
    public void testInsert() throws SQLException {
        //1.通过过JDBCUtils工具类获取连接
        Connection con = JDBCUtils.getConnection();

        //2.获取Statement对象
        Statement statement = con.createStatement();

        //2.1 编写SQL
        String sql ="insert into jdbc_user values(null,'石头','123','2021/02/04')";
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        //3. 关闭流
        JDBCUtils.Close(con,statement);
    }
    /**
     * 修改操作
     * @throws SQLException
     */
    @Test
    public void testUpdate() throws SQLException {
        //1.通过过JDBCUtils工具类获取连接
        Connection con = JDBCUtils.getConnection();

        //2.获取Statement对象
        Statement statement = con.createStatement();

        //2.1 编写SQL
        String sql ="update jdbc_user set username = '九渊' where id = 1";
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        //3. 关闭流
        JDBCUtils.Close(con,statement);
    }

    /**
     * 删除操作
     * @throws SQLException
     */
    @Test
    public void testDelete() throws SQLException {
        //1.通过过JDBCUtils工具类获取连接
        Connection con = JDBCUtils.getConnection();

        //2.获取Statement对象
        Statement statement = con.createStatement();

        //2.1 编写SQL
        String sql ="delete from jdbc_user  where username = '石头'";
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        //3. 关闭流
        JDBCUtils.Close(con,statement);
    }
    /*--------------------------------------DQL-------------------------------------------*/

    /**
     * 查询操作
     * @throws SQLException
     */
    @Test
    public void testSelect() throws SQLException {
        //1.通过过JDBCUtils工具类获取连接
        Connection con = JDBCUtils.getConnection();

        //2.获取Statement对象
        Statement statement = con.createStatement();

        //2.1 编写SQL
        String sql ="select * from jdbc_user";
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String username = resultSet.getString("username");
            Date birthday = resultSet.getDate("birthday");
            System.out.println(id + "\t" + username + "\t" + birthday);
        }
        //3. 关闭流
        JDBCUtils.Close(con,statement,resultSet);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值