详解JDBC

JDBC的概念

  • 在没有JDBC之前,java开发人员针对每一种数据库的不同,写一套对应的驱动程序,这就需要java开发人员去维护数据库的驱动程序,一旦数据库的底层实现改变,驱动程序可能会随之改变,显得很麻烦;
  • 为此,Sun公司设计了一套通用的java语言操作不同数据库的接口——JDBC,即 Java DataBase Connectivity(Java数据库连接),用Java语言操作数据库。本质是Sun公司定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这些接口,提供数据库驱动jar包。我们可以使用这套接口去编程,真正执行的代码是驱动jar包中的实现类。
  • 这样做的优点在于java开发人员只需要提供java应用和一套规范,数据库厂商提供具体的java驱动程序,去实现JDBC这个接口,只要数据库的底层发生改变了,厂商要随之更新驱动程序,而不影响java应用程序
  • JDBC接口在哪?在JDK中,java.sql.*,javax.sql.*

JDBC:(Java Data Base Connectivity,java数据库连接) 是一种用于执行sql语句的Java API ,可以为多种关系型数据库提供统一的访问,它由一组用JAVA语言编写类与接口组成。

JDBC 提供了一种基准,据此可以构建更高级的工具与接口

提供程序员调用的接口与类,集成在java.sql和javax.sql包中:

DriverManager类
Connection接口
Statement接口
ResultSet接口

在这里插入图片描述

实现一个JDBC连接

第一步:创建lib文件夹,将对应jar包,放进来

在这里插入图片描述

第二步:加载驱动类 数据库不同驱动类不同,加载驱动类才能知道需要对接的数据库。

//驱动类:"com.mysql.jdbc.Driver"
Class.forName("com.mysql.jdbc.Driver");

第三步:通过驱动connection连接数据库,承担传送数据的任务
DriverManager:根据数据库的不同管理各种不同JDBC驱动,java导入此类才能与数据库连接 ,是JAVA与数据库连接的桥梁,

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");

//连接字符串:"jdbc:mysql://localhost:3306/myschool"
//数据库账号:root
//数据库密码:root

在这里插入图片描述

第四步:通过connection 获取Statement 接口 ,负责执行sql语句

Statement statement =  connection.createStatement();

第五步:resultset保存sql语句执行后产生的查询结果,增加删除修改不需要使用resultSET

例如:执行了查询语句

//通过statement的 executeQuery方法  发送查询sql语句到数据库中执行
执行完成后 查询到虚拟表  
需要通过ResultSet接口接收虚拟表
ResultSet resultSet = statement.executeQuery("select * from student");

在这里插入图片描述第六步:取出数据
在这里插入图片描述该方法相当于一个指针,一直挪动到查询出来的结果集中的每一条记录,然后使用该字段对应的get方法取出数据;

//处理查询后的虚拟表     .next() 方法 判断resultSet中是否存在下一行数据
//遍历虚拟表
while (resultSet.next()){
   
        // 遍历结果集  注意查询后虚拟表要获取的列的类型
        // 列的下标从1开始来获取虚拟表中的数据,也可以通过列名来获取虚拟表中的数据
        int stuNo = resultSet.getInt(1);
        String stuName = resultSet.getString(3);
        String stuPhone = resultSet.getString("phone");

			System.out.println("学生编号:"+stuNo+"学生姓名:"+stuName+"学生电话:"+stuPhone);
}

在这里插入图片描述

第七步: 以上接口都需要关闭,正着用,倒着关。

try {
       
    if(null != resultSet)        
        resultSet.close();    
    if(null != statement)        
        statement.close();    
    // 判断 connection 不为空  》 关闭当前数据库连接    
    if(null != connection)        
        connection.close();
} catch (SQLException throwables) {
   
      throwables.printStackTrace();
}

执行查询语句的案例演示

resultSET接受的是查询语句的结果

package com.xk.jdbc;

import java.sql.*;

/**
 * 执行查询语句的案例演示
 */
public class DemoB {
   
    public static void main(String[] args) {
   
        // 创建Connection 数据库s
        Connection connection = null;
        //用于发送sql语句到数据库中执行  并返回结果
        Statement statement  =null;
        // 用于保存查询语句 返回的虚拟表
        ResultSet resultSet = null;
        try {
   
            //1、加载驱动类  》加载了驱动类 才能知道需要对接的数据库
            Class.forName("com.mysql.jdbc.Driver");
            //2、连接数据库  (“在哪?端口?连接的是哪一个数据库?”,账号?,密码?)
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
            System.out.println("数据库连接成功!!");
            // 通过connection  获取Statement 接口
            statement =  connection.createStatement();
            //通过statement的 executeQuery方法  发送查询sql语句到数据库中执行
            resultSet = statement.executeQuery("select * from student");

//            System.out.println("ResultSet中是否存在下一行数据:"+resultSet.next());
//            处理查询后的虚拟表     .next() 方法 判断resultSet中是否存在下一行数据
            //遍历虚拟表
            while (resultSet.next()){
   
                // 遍历结果集  注意查询后虚拟表要获取的列的类型
                // 1、通过下标获取列中的值(下标从1开始)  2、通过列名获取
                int stuNo = resultSet.getInt(1);
                String stuName = resultSet.getString(3);
                String stuPhone = resultSet.getString("phone");

                System.out.println("学生编号:"+stuNo+"学生姓名:"+stuName+"学生电话:"+stuPhone);
            }
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        } catch (SQLException throwables) {
   
            throwables.printStackTrace();
        } finally {
   
            // 正着用 ,倒着关
            try {
   
                if(null != resultSet)
                    resultSet.close();
                if(null != statement)
                    statement.close();
                // 判断 connection 不为空  》 关闭当前数据库连接
                if(null != connection)
                    connection.close();
            } catch (SQLException throwables) {
   
                throwables.printStackTrace();
            }
        }


    }
}

执行增加、删除、修改语句的案例演示:并设置事务

  • 增加删除修改不需要使用resultSET,返回的结果是int类型的影响行数,resultSET接受的是查询语句的结果

  • 通过Statement的executeUpdate(sql)方法 执行增加 删除 修改
    执行后 executeUpdate方法 返回影响行数

  • 设置事务:影响行数成功 就提交来修改数据库,增删改查询数据库报错就让事务回滚,没有报错到finally中就提交
    在这里插入图片描述

  • 新的增删改查方法:execute返回bool值 此方法可以发送任意SQL语句包括查询语句

package com.xk.jdbc;

import java.sql.*;

/**
 * 执行增加、删除、修改语句的案例演示
 */
public class DemoC {
   
    public static void main(String[] args) {
   
        // 创建Connection 数据库s
        Connection connection = null;
        //用于发送sql语句到数据库中执行  并返回结果
        Statement statement  =null;
        // 用于保存查询语句 返回的虚拟表
        ResultSet resultSet = null;
        try {
   
            //1、加载驱动类  》加载了驱动类 才能知道需要对接的数据库
            Class.forName("com.mysql.jdbc.Driver");
            //2、连接数据库  (“在哪?端口?连接的是哪一个数据库?”,账号?,密码?)
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
            System.out.println("数据库连接成功!!");
            connection.setAutoCommit(false);// 设置事务是否自动提交
            // 通过connection  获取Statement 接口
            statement =  connection.createStatement();
            //通过Statement的executeUpdate(sql)方法 执行增加 删除  修改
            // 执行后 executeUpdate方法 返回影响行数
//            String sql = "INSERT INTO `grade` (`gradeName`) VALUES ( '五年级');";
//            String sql = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值