JDBC的详细介绍与简单案例

JDBC

1.JDBC入门

1.1.JDBC的概述

  • Java DataBase Connectivity Java(Java数据库的连接)。
  • 目的是使用Java的代码来操作数据库。
  • 需要使用JDBC(Java数据库连接)规范来操作数据库的数据。

1.2.JDBC的规范

  • JDBC是一套接口规范。
  • JDBC的实现类都是由各个数据库的生产商提供的实现类。
  • 只要学会了JDBC的接口和方法,就可以实现Java代码操作任何数据库了。

1.3.驱动

  • 数据传输的桥梁
  • 驱动指的是各个数据库厂商提供的实现类。
  • 需要来使用实现类,就需要导入MySQl(这里使用的是MySQL数据库,其他的数据库操作都一样,除了导入jar包不一样)提交的驱动jar包
  • 需要导入mysql - connector - java - 8.0.19 - bin.jar

1.4.JDBC开发的入门步骤

  1. 加载驱动类(先导入开发jar包,驱动包)。
  2. 获取到连接(操作数据库,连接上数据库),过程中传入连接主机地址,用户名和密码。
  3. 执行一些SQL语句(执行查询的SQL语句)。
  4. 遍历结果集(查询的数据全部都封装到结果集中)。
  5. 释放资源(连接…)。

2.JDBC相关的接口和API(重要的方法必须掌握)

2.1.DriverManager类(驱动)

1.DriverManager
	* 使用DriverManager来管理JDBC的驱动的实现类
2.作用
	* 加载驱动
		* static void registerDriver(Driver driver)
			* 参数:传入的真正的参数其实是MySQL提			供Driver的类
		* 传入的参数new Driver() 这种方式不是特别好
			* 过于依赖某一个实现类
			* 驱动的jar包会加载两次(通过看源代码)
		* 解决上述的两个问题
			* Class.forName("com.mysql.jdbc.Driver");
	* 获取连接
		* static Connection getConnection(String url, String user, String password)
			* 参数有3个
				* 第一个参数:jdbc:mysql://localhost:3306/SCOTT(背下来)
					* jdbc ‐‐ 代表的主协议
					* mysql ‐‐ 子协议(有可能变化的)
					* localhost ‐‐ 主机
					* 3306 ‐‐ 默认的端口号
					* SCOTT ‐‐ 数据库
				* 如果访问的是本地的自己的数据库,那么localhost:3306就可以省略不写
					* mysql的命令 ‐uroot ‐proot
					* JDBC简写:jdbc:mysql:///SCOTT
				* 第二个参数:root(用户名)
				* 第三个参数:root(密码)
3.总结
	* 管理驱动的
	* 作用
		* 加载驱动
			* Class.forName("com.mysql.jdbc.Driver");
		* 获取连接
			* getConnection("jdbc:mysql:///SCOTT","root","密码");

2.2.Connection接口(链接)

1.Connection
	* 代表的数据库的连接,非常重要,并且连接比较稀有,用完一定要释放它
2.作用
	* 能获取到执行SQL语句的对象(获取Statement接口)
		* Statement createStatement() ‐‐ 获取到Statement接口
		* PreparedStatement prepareStatement(String sql) ‐‐ 获取到PreparedStatement
接口,对象非常重要的,防止SQL注入的漏洞。
	* 管理事务(没学过)
		* void setAutoCommit(boolean autoCommit) ‐‐ 开启事务
		* void commit() ‐‐ 提交事务
		* void rollback() ‐‐ 回滚事务
3.总结
	* 获取能执行SQL语句对象的方法
		* Statement createStatement()
		* PreparedStatement prepareStatement(String sql)
	* 只需要知道Connection接口可以管理事务就可以了!!

2.3.Statement接口(能执行SQL语句)

1.Statement接口
	* 能执行SQL语句的对象
2.作用
	* 能执行SQL语句
		* ResultSet executeQuery(String sql) ‐‐ 执行查询SQL语句的方法
		* int executeUpdate(String sql) ‐‐ 能执行增删改的SQL语句
	* 能执行批处理
		* void addBatch(String sql) ‐‐ 把SQL语句添加到批处理中
		* void clearBatch() ‐‐ 清除批处理
		* int[] executeBatch() ‐‐ 执行批处理
3.总结
	* 就是能执行SQL语句
	* 作用
		* 执行SQL语句
		* 执行批处理

2.4.ResultSet接口(代表结果集)

1.ResultSet接口 
	* 代表的是结果集,执行的是查询的SQL语句,把查询的数据的表格封装到ResultSet接口中,通过遍历该接口,
获取到查询的结果!!
2.总结
	* 封装数据
		* ResultSet接口使用表格的方式来封装数据
		* 内部维护一个游标,默认指向的是第一行数据之前
		* 调用next()方法来向下移动游标,移动到某一行,获取该行的数据
		* 注意:游标默认只能向下移动
	* 获取值
		* 根据字段的类型,调用不同的方法
		* 例如
			* 如果字段是int或者bigint
				* getInt()或者getLong()
			* 如果字段是varchar char类
				* getString()
			* 使用getObject()获取任何类型的数据,自己强转
		* 获取数据的方法都是重载的
			* getInt(int index) ‐‐ 通过下标值来取值,默认从1开始
			* getInt(String s) ‐‐ 通过字段的名称来取值,比较常用的

2.5.释放资源(必须要做的)

1.连接等对象必须要释放
2.释放资源的代码一帮会在finally代码块中释放
	* 一定会执行的
3,释放的代码的标准
	if(conn != null){
		try {
			// 释放资源
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		conn = null;
	}

JDBC连接MySQL数据库简单案例

mysql数据库:
在这里插入图片描述
版本:MySQL是8.5以上

package com.suntao.JDBC;

import java.sql.*;

public class MySQLJDBCDemo01 {
    public static void main(String[] args) {
        //把连接等在这里定义,为了最后关闭资源的时候能判断是否为空
        Connection conn = null; //获取连接对象
        Statement stmt = null;  //创建执行对象
        ResultSet rs = null;    //创建结果集对象
        try {
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SCOTT?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true","root","123456");
            //3.创建一个执行对象,可以执行Sql语句
            stmt = conn.createStatement();
            //4.定义SQL语句
            String sql = "select * from user";
            //5.执行sql语句(返回值用结果集对象获取)
            rs = stmt.executeQuery(sql);
            //6.遍历结果(把数据库中多行数据打印出来)
            while (rs.next()){
                int id = rs.getInt("userId");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("用户id="+id+",用户姓名="+name+",用户年龄="+age);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            try {
                //先打开的后关闭
                if(rs != null) {
                    rs.close();
                }
                if(stmt != null){
                    stmt.close();
                }
                if(conn != null){
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果:
在这里插入图片描述

增删改查

package com.suntao.JDBC;

import java.sql.*;

public class MySQLJDBCUpdate {
    public static void main(String[] args) {
        //把获取连接,创建执行对象,结果集变量在这里定义,为了最后关闭资源的时候能判断是否为空
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SCOTT?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true","root","123456");
            //3.创建执行对象执行sql程序
            stmt = conn.createStatement();
            //4.定义sql语句
            //添加用户
            String sqlInsert = "insert into user value ('5','tianqi','18')";
            //修改用户信息
            String sqlUpdate = "update user set name = 'zhangsi' where userId = 1";
            //删除用户信息
            String sqlDelete = "delete from user where userId = 2";
            //查询添加后结果
            String sqlSelect = "select * from user";
            //5.执行sql语句
            //添加
            stmt.executeUpdate(sqlInsert);
            //修改
            stmt.executeUpdate(sqlUpdate);
            //删除
            stmt.executeUpdate(sqlDelete);
            //查询
            rs = stmt.executeQuery(sqlSelect);
            //6.遍历打印结果集
            while (rs.next()){
                int id = rs.getInt("userId");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println(id+" "+name+" "+ age);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            try {
                if(rs != null){
                    rs.close();
                }
                if(stmt != null){
                    stmt.close();
                }
                if(conn != null){
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

结果:
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值