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

这篇博客详细介绍了在Java中对数据封装的步骤,包括属性封装、get/set方法、构造函数和toString方法的编写。接着,作者讨论了JDBC数据库驱动的封装,将获取驱动、创建连接和关闭资源等常用操作抽象到一个工具类中,以提高代码复用性和效率。最后,展示了如何对数据库操作(增删改查)进行封装,以简化代码并增强可维护性。
摘要由CSDN通过智能技术生成

1、数据封装

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

对属性的封装
get和set方法的编写
构造函数的编写
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数据库使用的七个基本步骤:

获取驱动
创建连接
编写sql
获取prepareStatement
执行sql语句,并返回结果
处理结果集
关闭资源
下面是实现上述步骤的部分代码:

        //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();

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

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

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("查询成功!");
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值