预习JDBC

客户端操作 MySQL 数据库的三种方式:
1)使用第三方客户端来访问,如 Navicat
2)使用命令行操作;
3)通过 Java 来访问 (即下面介绍内容);

1. 什么是 JDBC

JDBC ( Java Database Connectivity )Java 语言连接数据库。
JDBCSUN 公司制定的一套接口,是 Java 访问数据库的标准规范,真正操作数据库需要具体的实现类,也就是数据库驱动(许多个 .class 文件打成 jar 包形式)。数据库驱动由数据库厂商提供,不同数据库驱动不一样(使用时需到对应官网下载)但程序员只需会调用 JDBC 接口中的方法即可。
在这里插入图片描述

好处:面向接口编程,面向抽象编程,使用同一套 Java 代码,进行少量修改就可以访问其他数据库。

2. JDBC 编程步骤

2.1 装载相应数据库的 JDBC 驱动并进行初始化

  • 导入所需的 jar 包(官网下载
    java 项目在导入 jar 包之前,外部库中只有 jdk
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

找到对应 jar 包并点击 OK 如果没有导包成功,将会发生 ClassNotFoundException 异常错误。

  • 初始化驱动
    Class.forName 是把这个类加载到 JVM 中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");//初始化驱动
        }
        catch(Exception e){
			e.printStackTrace();
		}

2.2 建立 JDBC 和数据库之间的 Connection 连接

		Connection con;
		String url = "jdbc:mysql://127.0.0.1:3306/example?useUnicode=true&characterEncoding=utf8&useSSL=false&
		serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&allowMultiQueries=true";

        String user="root";
        String password="root";
        try{
            con= DriverManager.getConnection(url,user,password);
            //获取连接
        }
        catch (SQLException e){
        	e.printStackTrace();
        }

这里需要提供 url,用户名和密码

  • 连接数据库的 URL 地址格式
    协议名:子协议://服务器名或 IP 地址:端口号/数据库名?参数=参数值
    在这里插入图片描述
    MySQL 中可以简写:jdbc:mysql: ///数据库名
    前提:必须是本地服务器,端口号是 3306

localhost --> 127.0.0.0.1

2.3 用 Connection 获取 Statement 对象

Connection 接口,具体的实现类由数据库的厂商实现,代表一个连接对象。

		try{
			Statement stmt = con.createStstement();//创建查询对象
		}
		catch( SQLException e ){
			e.printStackTrace();
		}

2.4 使用 Statement 对象执行 SQL 语句

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

int executeUpdate(String sql) //executeQuery 用于发送 select 语句
用于发送 DML 语句,增删改的操作,insert、update delete

参数:SQL 语句

返回值:返回对数据库影响的行数

PreparedStatement

预处理语句,也就是 PreparedStatement(String sql ) ,对参数 sql 指定的 SQL 语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在 PreparedStatement 对象中,减轻了数据库的负担,而且也提高了访问数据库的速度。

2.5 返回结果

ResultSet executeQuery(String sql)
用于发送 DQL 语句,执行查询的操作 select

参数:SQL 语句

返回值:查询的结果集

2.6 释放资源

  • 需要释放的对象:ResultSet 结果集,Statement 语句,Connection 连接

  • 释放原则:先开的后关,后开的先关。ResultSet - Statement - Connection

  • 放在 finally 代码块中

		rs.close();
		stmt.close();
		con.close();
		//详见实例

在这里插入图片描述

3. 实例

import java.sql.*;

public class demo1 {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        String url = "jdbc:mysql://127.0.0.1:3306/example?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&allowMultiQueries=true";
        String user = "root";
        String password = "root";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//初始化驱动
            con = DriverManager.getConnection(url, user, password);
            System.out.println(con);
            stmt = con.createStatement();
            rs = stmt.executeQuery("SELECT * FROM t_class");
            while(rs.next()){
                int number = rs.getInt(1);
                String name = rs.getString(2);
                String room = rs.getString(3);
                System.out.printf("%d\t",number);
                System.out.printf("%s\t",name);
                System.out.printf("%s\n",room);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            try{
                if( rs != null) {
                    rs.close();
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
            try{
                if( stmt != null) {
                    stmt.close();
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
            try{
                if( con != null) {
                    con.close();
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
    }
}

useUnicode=true&characterEncoding=utf8 : 指定字符的编码、解码格式

useSSL=false : 和服务器身份验证有关,设置 useSSL=false来显式禁用 SSL ,或者设置 useSSL=true 并为服务器证书验证提供信任存储

serverTimezone=Asia/Shanghai :设置时区

rewriteBatchedStatements=true :减少程序提交 SQLMySQL 的频率,不要每次提交一条

allowPublicKeyRetrieval=true:防止他人获取明文密码

allowMultiQueries=true :可以在 SQL 语句后携带分号,实现多语句执行,可以执行批处理,同时发出多个 SQL 语句

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值