宁波中软国际实习日记(二):JDBC数据库的封装与分层

1、数据封装

首先我们来看一下数据封装的4个步骤:

  1. 对属性的封装
  2. get和set方法的编写
  3. 构造函数的编写
  4. toString函数的重写

好的,现在我们对实体类按照上述步骤进行一下封装:

package com.bean;
/*
 * 实体类User
 */
public class User {
    private int id; //用户id
    private String username; //用户名
    private String password; //用户密码

    //get and set
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    //构造方法

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public User() {
    }

    //toString

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

在进行封装的时候有一个小技巧,那就是在写完实体类属性之后,直接利用IDEA的generate功能生成get和set方法、构造方法以及toString方法。
在这里插入图片描述

2、JDBC数据库驱动的封装

首先我们来回顾一下JDBC数据库使用的七个基本步骤:

  1. 获取驱动
  2. 创建连接
  3. 编写sql
  4. 获取prepareStatement
  5. 执行sql语句,并返回结果
  6. 处理结果集
  7. 关闭资源

下面是实现上述步骤的部分代码:

            //1.获取驱动
            Class.forName(driver);
            //2.创建连接
            conn = DriverManager.getConnection(url, user, pwd);
            //3.编写sql语句
            String sql = "select * from user"
            //4.获取对象
            pstm = conn.prepareStatement(sql);
            //5.执行并返回结果
            rs = pstm.executeQuery();
            //6.处理结果
            while (rs.next())
            {
                System.out.println("id: " + rs.getInt(1));
                System.out.println("用户名: " + rs.getString(2));
                System.out.println("密码: " + rs.getString(3));
            }
            //7.关闭资源
            rs.close();
            pstm.close();
            conn.close();

在这里我们可以发现:
获取驱动、创建连接和关闭资源这三个操作是会被经常使用的,如果每次都单独写一遍,代码量会非常多并且很繁琐,这时我们就应该进行封装操作:

  1. 首先我们创建一个工具类,我这里叫DButil
  2. 然后首先把数据库驱动名、数据库URL、用户名和密码这四大必备属性进行封装
  3. 接下来我们把获取驱动直接写成一个静态代码块,因为每次使用这个工具类都需要获取驱动,为了提高性能和避免空间浪费,我们直接将其写成一个static代码块,这样在类第一次被加载时就完成了驱动的注册
  4. 而对于创建连接和关闭资源这两个操作,我们可以将其写成静态方法,方便每次数据库操作时对其进行调用

封装好的代码块如下:

package util;

import java.sql.*;

public class DBUtil {
    private static String driver = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/java3?userSSL=true&characterEncoding=utf-8";
    private static String user = "root";
    private static String pwd = "123456";

    static {
        try {
            Class.forName(driver);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection get_Conn() throws SQLException {
        Connection conn = DriverManager.getConnection(url, user, pwd);
        return conn;
    }

    public static void get_CloseConn(ResultSet rs, PreparedStatement pstm, Connection conn) throws SQLException {
        if (rs != null) {
            rs.close();
        }
        if (pstm != null) {
            pstm.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
}

3、数据库操作的封装

我们都知道,数据库有四大操作:增删改查,我们不可能每次操作都单独把所有语句写出来,所以针对不同的数据库操作,我们应该对其单独进行封装,之前的代码编写中,我已经对其进行了封装,在加上对JDBC数据库驱动的封装之后,代码量变得更加少也更加简洁,具体代码块如下:

package dao;

import bean.User;
import util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
    private static Connection connection = null;
    private static PreparedStatement preparedStatement = null;
    private static ResultSet resultSet = null;

    public static List<User> getAllUser() {
        List<User> userList = new ArrayList<User>();
        try {
            connection = DBUtil.get_Conn();
            String sql="select * from tb_user";
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
            while (resultSet.next()){
                User user = new User();
                user.setId(resultSet.getInt(1));
                user.setUserame(resultSet.getString(2));
                user.setPassword(resultSet.getString(3));
                userList.add(user);
                System.out.println(user);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                DBUtil.get_CloseConn(resultSet,preparedStatement,connection);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return userList;
    }
    public static void main(String args[]) {
        getAllUser();
        System.out.println("查询成功!");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中软国际外包是一家专业提供软件开发、外包和咨询服务的公司。华为ETL(Extract, Transform, Load)是华为公司用于数据仓库建设与管理的关键技术之一,用于将数据从不同的来源提取出来、进行转换和加载到目标数据仓库中。 华为ETL面试通常会涉及以下几个方面的内容: 1. ETL的基本概念和原理:面试官可能会询问ETL的定义、核心工作流程和重要性等。应聘者需要清楚地解释ETL的概念和作用,并能够说明其在数据仓库建设和管理中的重要性。 2. 数据提取(Extract):面试官可能会询问你对数据提取过程的理解和应用实践。你需要了解不同的数据来源和提取方法,例如从关系型数据库、文件或API中提取数据,并且能够解释数据提取过程中可能遇到的挑战和解决方案。 3. 数据转换(Transform):面试官可能会询问你在数据转换过程中的经验和技能。你需要掌握数据清洗、转换和整合的方法和技术,例如数据规范化、格式转换数据合并等,并能够描述数据转换过程中的一些典型问题和解决方案。 4. 数据加载(Load):面试官可能会询问你对数据加载的理解和应用实践。你需要了解不同的数据加载方法和策略,例如全量加载、增量加载、并行加载等,并能够解释数据加载过程中的一些常见问题和解决方案。 此外,面试中还有可能出现一些与ETL相关的工具和技术的问题,例如数据抽取工具、数据转换语言、数据质量控制等。应聘者需要对这些工具和技术有一定的了解和应用经验。 最后,无论面试中问到哪个方面的内容,应聘者需要准备足够的实际案例和解决方案,以便能够展示自己的实际经验和能力。只有通过具体的实践案例,才能更好地回答面试官的问题,展现自己的能力和价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值