使用JDBC实现数据访问对象层(DAO)代码示例

下面是使用JDBC实现数据访问对象层(DAO)代码示例的完整攻略:

1. JDBC DAO层的基本结构

在实现JDBC DAO层之前,需要先确定DAO层的基本结构。一般来说,DAO层包括以下三个部分:

  1. DAO接口,用于定义数据的增删改查操作。
  2. DAO实现类,用于实现DAO接口,提供具体的数据访问操作。
  3. 实体类,用于存储数据库中的数据,每个实体类对应一张数据表。

2. JDBC DAO的实现过程

2.1 JDBC工具类的编写

在实现JDBC DAO之前,需要先编写JDBC工具类,用于进行数据库连接、关闭等操作。以下是一个简单的JDBC工具类的示例:

public class JdbcUtils {
    private static final String url = "jdbc:mysql://localhost:3306/test";
    private static final String username = "root";
    private static final String password = "";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }

    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

2.2 DAO接口的定义

定义DAO接口,用于定义数据的增删改查操作。以下是一个简单的DAO接口的示例:

public interface UserDao {
    void addUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
    User getUserById(int id);
    List<User> getAllUser();
}

2.3 DAO实现类的编写

实现DAO接口,提供具体的数据访问操作。以下是一个简单的DAO实现类的示例:

public class UserDaoImpl implements UserDao {
    @Override
    public void addUser(User user) {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            conn = JdbcUtils.getConnection();
            stmt = conn.prepareStatement("insert into user(id, name, age) values(?, ?, ?)");
            stmt.setInt(1, user.getId());
            stmt.setString(2, user.getName());
            stmt.setInt(3, user.getAge());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(conn, stmt, null);
        }
    }

    @Override
    public void updateUser(User user) {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            conn = JdbcUtils.getConnection();
            stmt = conn.prepareStatement("update user set name = ?, age = ? where id = ?");
            stmt.setString(1, user.getName());
            stmt.setInt(2, user.getAge());
            stmt.setInt(3, user.getId());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(conn, stmt, null);
        }
    }

    @Override
    public void deleteUser(int id) {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            conn = JdbcUtils.getConnection();
            stmt = conn.prepareStatement("delete from user where id = ?");
            stmt.setInt(1, id);
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(conn, stmt, null);
        }
    }

    @Override
    public User getUserById(int id) {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        User user = null;
        try {
            conn = JdbcUtils.getConnection();
            stmt = conn.prepareStatement("select * from user where id = ?");
            stmt.setInt(1, id);
            rs = stmt.executeQuery();
            if (rs.next()) {
                user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(conn, stmt, rs);
        }
        return user;
    }

    @Override
    public List<User> getAllUser() {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        List<User> userList = new ArrayList<>();
        try {
            conn = JdbcUtils.getConnection();
            stmt = conn.prepareStatement("select * from user");
            rs = stmt.executeQuery();
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setAge(rs.getInt("age"));
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtils.close(conn, stmt, rs);
        }
        return userList;
    }
}

2.4 实体类的定义

实现实体类,用于存储数据库中的数据,每个实体类对应一张数据表。以下是一个简单的实体类的示例:

public class User {
    private int id;
    private String name;
    private int age;

    // getter/setter省略
}

3. 示例说明

3.1 添加数据

首先,通过JDBC DAO层的工具类获取数据库连接。

Connection conn = JdbcUtils.getConnection();

然后创建UserDaoImpl对象,并调用addUser(User user)方法,添加数据。

UserDao userDao = new UserDaoImpl();
User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(18);
userDao.addUser(user);

3.2 查询数据

首先,通过JDBC DAO层的工具类获取数据库连接。

Connection conn = JdbcUtils.getConnection();

然后创建UserDaoImpl对象,并调用getUserById(int id)方法,查询数据。

UserDao userDao = new UserDaoImpl();
User user = userDao.getUserById(1);
System.out.println(user.getName());

从数据库中查询出的数据将会被封装到User对象中返回。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用JDBC实现数据访问对象层(DAO)代码示例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring+MongoDB实现登录注册功能

    下面就为你讲解如何使用Spring和MongoDB实现登录注册功能。 准备工作 安装并启动MongoDB服务器 创建Maven项目,引入所需依赖 xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo…

    Java 2023年6月15日
    00
  • Java如何使用Agent和ASM在字节码层面实现方法拦截

    下面我将详细讲解“Java如何使用Agent和ASM在字节码层面实现方法拦截”的完整攻略,希望能对你有所帮助。 首先,我们需要了解Agent和ASM的相关知识。 Agent是JavaSE5引入的一个新特性,是一种运行时的插件机制,它通过在被启动的Java虚拟机上安装一个代理程序,可以实现许多高级的功能,比如动态注入代码或修改以及捕获JVM内部的事件信息等。 …

    Java 2023年5月26日
    00
  • 消息推送平台的实时数仓?!flink消费kafka消息入到hive

    大家好,3y啊。好些天没更新了,并没有偷懒,只不过一直在安装环境,差点都想放弃了。 上一次比较大的更新是做了austin的预览地址,把企业微信的应用和机器人消息各种的消息类型和功能给完善了。上一篇文章也提到了,austin常规的功能已经更新得差不多了,剩下的就是各种细节的完善。 不知道大家还记不记得我当时规划austin时,所画出的架构图: 现在就剩下aus…

    Java 2023年5月11日
    00
  • Java Array.sort()源码分析讲解

    Java Array.sort()源码分析讲解 概述 Java的Array类中提供了一个sort()方法,用于对数组进行排序。sort()方法是一个static的方法,因此可以直接通过类名调用。 Arrays.sort(array); sort()方法有两个重载版本: public static void sort(byte[] a) public stat…

    Java 2023年5月19日
    00
  • 解决SpringMvc中普通类注入Service为null的问题

    解决SpringMVC中普通类注入Service为null的问题 在 SpringMVC 中,我们经常会遇到普通类注入 Service 为 null 的问题。这是因为 SpringMVC 默认只会扫描带有 @Controller、@Service、@Repository、@Component 等注解的类,而普通类并不会被扫描到。本文将详细讲解如何解决这个问题…

    Java 2023年5月18日
    00
  • 详解SpringBoot封装使用JDBC

    下面我来详细讲解如何在SpringBoot中封装使用JDBC。 1. 使用JDBC操作数据库 1.1 创建数据库 首先,我们需要创建一个数据库来进行操作。假设我们使用MySQL数据库,在MySQL客户端中输入以下命令来创建一个名为“test”的数据库。 CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET ut…

    Java 2023年5月19日
    00
  • java中的FileInputStream三种read()函数用法

    针对“java中的FileInputStream三种read()函数用法”,我整理了以下攻略: 一、FileInputStream简介 java.io包中的FileInputStream是一个类,它用于从文件系统中的文件获取输入字节流。它继承了InputStream类。在使用FileInputStream时,一个文件必须存在,并且应该以字节的形式存在。Fil…

    Java 2023年5月26日
    00
  • java连接orcale数据库示例分享

    下面是详细的攻略。 Java连接Oracle数据库 准备工作 在开始之前,我们需要确保已经完成以下准备工作: 安装Oracle数据库:在官网中下载并安装Oracle数据库,安装完成后配置好环境变量。 下载Oracle JDBC驱动:在官网中下载对应版本的JDBC驱动,将其复制到Java项目中。 示例1:使用JDBC API进行数据库操作 以下是连接Oracl…

    Java 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部