JDBC简介和快速入门

一. 引言

1. 如何操作数据库

使用客户端工具访问数据库,需要手工建立连接,输入用户名和密码登录,编写 SQL 语句,点击执行,查看操作结果(结果集或受影响行数)。

在这里插入图片描述

2. 实际开发中,会采用客户端操作数据库吗?

在实际开发中,当用户的数据发生改变时,不可能通过客户端操作执行 SQL 语句,因为操作量过大,无法保证效率和正确性。

二. 概述

1. 由来

提供者:Sun公司
在这里插入图片描述

  • 我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。我们要做到的是同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出

2. 概括

JDBC(Java Database Connectivity) Java 连接数据库的规范(标准),可以使用 Java 语言连接数据库完成CRUD 操作。

3. 概念

  • JDBC: 就是Java语言操作关系型数据库的一套API
    全称:(Java DataBase Connectivity) Java 数据库 连接

4. 本质

  1. 官方(sun公司)定义的一套操作所有关系型数据库的规则,即 接口
  2. 各个数据库厂商去实现这套接口,提供数据库驱动jar包
  3. 我们可以使用这套接口(JDBC)编程真正执行的代码是驱动jar包中的实现类

在这里插入图片描述

5. 好处

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
  • 可随时替换底层数据库,访问数据库的Java代码基本不变以后编写操作数据库的代码只需要面向JDBC(接口),操作哪儿个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。
  • mysql-connector-java-5.1.X 适用于 5.X 版本
    mysql-connector-java-8.0.X 适用于 8.X版本
  • 如下图就是MySQL驱动包(我所提供的是5.1)

在这里插入图片描述
百度云链接:https://pan.baidu.com/s/1mG9-n6yZ4vr7VDugGrDdCw
提取码:SGS1
注意:在IDEA下,

  • 在项目下新建 lib 文件夹,用于存放 jar 文件
  • 将 mysql 驱动mysql-connector-java-5.1.X复制到项目的 lib 文件夹中
  • 选中 lib 文件夹右键 Add as Libraay,点击 OK

6. JDBC API

  • JDBC 是由多个接口和类进行功能实现
类型权限定名简介
Classjava.sql.DriverManager管理多个数据库驱动类,提供了获取数据库连接的方法
interfacejava.sql.Connection代表一个数据库连接(当connection不是null时,表示已连接数据库)
interfacejava.sql.Statement发送SQL语句到数据库工具
interfacejava.sql.ResultSet保存SQL查询语句的结果数据(结果集)
classjava.sql.SQLException处理数据库应用程序时所发生的异常

三. JDBC(Java Database Connectivity)

1. 流程

在这里插入图片描述

  • 第一步:编写java代码
  • 第二步:Java代码SQL发送到Mysql服务端
  • 第三步:Mysql服务端接收到SQL语句并执行SQL语句
  • 第四步:将SQL语句执行的结果返回给Java代码

2. 编写代码步骤

  1. 创建工程,导入驱动jar架包
    在这里插入图片描述
  • 常用接口

    • DriverManager(驱动管理)类:管理不同的驱动
    • Connection(连接)接口:连接数据库
    • Statement(声明)接口:执行sql语句
    • ResultSet(结果集)接口:接收查询的结果集
  1. 注册驱动

使用 Class.forName("com.mysql.jdbc.Driver");手动加载字节码文件到 JVM 中

  • 方案一
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
  • 方案二:反射机制

    会加载类,在加载类时,就会执行静态代码块
    在静态代码块中有创建驱动对象已经注册驱动代码
    加载驱动的操作只会被执行一次

Class.forName("com.mysql.jdbc.Driver");
  1. 获取连接数据库

URL(Uniform Resource Locator) 统一资源定位符:由协议、IP、端口、SID(程序实例名称)组成
Java代码需要发送SQL给MySQL服务端,就需要先建立连接
url:数据库的连接地址
mysql的url形式:jdbc:mysql://主机地址:端口号/数据库名称?连接参数
username:用户名
password:密码

Connection conn=DriverManager.getConnection(url,username,password);
  1. 获取SQL对象

通过 Connection 对象获得 Statement 对象,用于对数据库进行通用访问。
执行SQL语句需要SQL执行对象,而这个执行对象就是Statement发射对象

Statement stmt = conn.createStatement();
  1. 执行SQL对象

注意:在编写 DML 语句时,一定要注意字符串参数的符号是单引号 '值'

statement.execute(sql);//何sql语句都能执行 返回值true代表有结果集,false代表没有
stmt.executeUpdate(sql);//执行非查询语句一般指DML和DDL
/**
* DML:返回值代表受影响的行数
* DDL:返回值为0
*/
stmt.executeQuery(sql);//执行select,show有结果集的
  1. 处理返回结果

查询结果集:迭代、依次获取。

ResultSet resultSet = statement.getResultSet();
/**
* rs.next() 如果返回值为true还有记录
* 调用完next方法之后,rs结果集对象本身就引用了一条记录
* 每调用一次next方法,rs就引用下一条记录
*/
while (resultSet.next()) {
            //通过结果集对象,获取记录中的字段值
            int id = resultSet.getInt("id");//resultSet.getInt("字段名");根据字段名获取
            String name = resultSet.getString("name");
            double price = resultSet.getDouble("money");
            System.out.println("{id="+id+",name="+name+",price="+price+"}");
        }

受影响行数:逻辑判断、方法返回。

if(result == 1){
 System.out.println("Success"); 
 }

可以让rs指向指定的记录,参数为记录的行
resultSet.afterLast();//直接移动到最后一行
resultSet.beforeFirst()//重新指向最开始位置
resultSet.first() //指向第一条
resultSet.last() //最后一条
resultSet.findColumn() //根据字段名获取所在列
resultSet.insertRow();增加一行 结果集和数据库
resultSet.deleteRow();删除一行
resultSet.updateRow();更新一行

  1. 释放资源

遵循先开后关原则,释放所使用到的资源对象

  stmt.close();
  conn.close();

3. 具体操作

  • 创建新的空的项目
    在这里插入图片描述

  • 定义项目的名称,并指定位置
    在这里插入图片描述

  • 对项目进行设置,JDK版本、编译版本
    在这里插入图片描述

  • 创建模块,指定模块的名称及位置
    在这里插入图片描述

  • 导入驱动包
    将mysql的驱动包放在模块下的lib目录(随意命名)下,并将该jar包添加为库文件
    在这里插入图片描述

  • 在添加为库文件的时候,有如下三个选项

    • Global Library:全局有效
    • Project Library:项目有效
    • Module Library:模块有效

在这里插入图片描述

  • 在src下创建类
    在这里插入图片描述
  • 编写代码如下
/**
* JDBC快速入门
*/
public class JDBCDemo {
    public static void main(String[] args) throws
Exception {
        //1. 注册驱动
        //Class.forName("com.mysql.jdbc.Driver");
        //2. 获取连接
        String url =
"jdbc:mysql://127.0.0.1:3306/db1";
        String username = "root";
        String password = "1234";
        Connection conn =
DriverManager.getConnection(url, username,
password);
        //3. 定义sql
        String sql = "update account set money =
2000 where id = 1";
        //4. 获取执行sql的对象 Statement
        Statement stmt = conn.createStatement();
        //5. 执行sql
        int count = stmt.executeUpdate(sql);//受影响的行数
        //6. 处理结果
        System.out.println(count);
        //7. 释放资源
        stmt.close();
        conn.close();
   }
}

结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发热的嘤嘤怪(2003计科胜胜同学)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值