JDBC入门五:JDBC驱动分析:一个按部门查询员工功能的例子;(主要是看其编码的习惯和组织套路);第3,第4,第5步分析;

本篇博客主要是观察其接口和类的组织方式和套路;然后分析JDBC的第3,第4,第5步骤;

 

目录

首先:创建HumanResourceApplication类;作为入口类;

然后,定义一个Command接口;注意这种使用接口的编程的组织方式和套路;

最后,编写接口的实现类:QueryCommand类,去具体实现接口的功能​

本篇博客延续JDBC入门四:补充说明:连接数据库的剩余的:第3,第4,第5步;


首先:创建HumanResourceApplication类;作为入口类;

这个类作为入口类,接受键盘输入,然后根据输入去调用其他类中定义的方法; 

package com.imooc.jdbc.hrapp;

import com.imooc.jdbc.command.Command;
import com.imooc.jdbc.command.QueryCommand;

import java.util.Scanner;

public class HumanResourceApplication {
    public static void main(String[] args) {
        System.out.println("1-查询部门员工");
        Scanner in = new Scanner(System.in);
        Integer cmd = in.nextInt();
        switch (cmd){
            case 1: //查询部门员工
                Command command = new QueryCommand();
                command.execute();
        }
    }
}

然后,定义一个Command接口;注意这种使用接口的编程的组织方式和套路;

package com.imooc.jdbc.command;

public interface Command {
    public void execute();
}

最后,编写接口的实现类:QueryCommand类,去具体实现接口的功能

package com.imooc.jdbc.command;

import java.sql.*;
import java.util.Scanner;

public class QueryCommand implements Command {

    @Override
    public void execute() {
        System.out.println("请输入部门名称");
        Scanner sc = new Scanner(System.in);
        String pdname = sc.next();
        // 将这三个对象拿到外边,扩大其生命周期;同时这三个对象都内置了close()方法;
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 1.加载并注册JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 2.创建数据库连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/imooc?useSSL=false&useUincode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "root", "12345");
            // 3.创建Statement对象
            stmt = conn.createStatement();
            // 结果集
            rs = stmt.executeQuery("select  * from employee where dname='"+pdname+"'");
            // 4.遍历查询结果
            // next()方法返回一个Boolean值,代表是否存在下一条记录;这个结果集有点迭代器的赶脚;
            // 如果有,返回true,同时结果集提取下一条记录
            // 如果没有,返回false,循环就会停止;
            // 默认,在开始执行下面的循环之前,结果集定位在第一条记录之前;;当循环时,就会尝试获取第一条记录,如果有返回true,
            // 就会把第一条记录提取出来,然后在循环体中进行读取;如果没有直接跳出。
            while (rs.next()) {
                Integer eno = rs.getInt(1);
                String ename = rs.getString("ename");
                Float salary = rs.getFloat("salary");
                String dname = rs.getString("dname");
                System.out.println(dname + "-" + eno + "-" + ename + "-" + salary);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            // 5.关闭连接,释放资源
            // 这儿演示了对所有资源的完整释放,以后在实际开发中,只写【conn.close();】是没问题的,因为物理连接一旦断开,所有的资源一定会被自动的释放;
            // 这儿之所以三个都写出来了,主要目的是要明白这背后的完全体是什么样子的;
            // 下面三个关闭都可能抛出SQLException,分别使用try块对其进行了处理;
            try {
                if (rs != null) {  // 如果rs != null,代表rs被实例化了,所以这儿需要关闭一下,进行释放;
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (stmt != null) {  // 如果rs != null,代表stmt被实例化了,所以这儿需要关闭一下,进行释放;
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if (conn != null && conn.isClosed() == false) {  // conn.isClosed()==false代表这个连接还没有关闭,还正在使用中;
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }
}

QueryCommand类的几点说明:

     (1)Connection conn =null; Statement stmt = null;ResultSet rs = null;都写在了外边;

     (2)第1步(加载驱动类)和第2步(创建数据库连接)在以后会独立出来,做成一个工具类;

     (3)SQL查询语句,在实际中不会是定死的,而是根据获取的参数拼凑出来的;

     (4)在遍历查询结果的时,ResultSet对象的get方法有很多种:

     (5)注意finally块中,三个close的使用方法和说明;


本篇博客延续JDBC入门四:补充说明:连接数据库的剩余的:第3,第4,第5步;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值