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

yizhihongxing

下面是使用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日

相关文章

  • java类型生命周期的详细解析

    Java类型生命周期的详细解析 Java语言的类型生命周期包括了以下几个阶段:加载(Loading)、链接(Linking)、初始化(Initialization)、使用(Usage)和卸载(Unloading)。在本文中,我们将详细解析Java类型生命周期的每个阶段。 1. 加载 加载阶段是指Java虚拟机(JVM)在需要使用一个类型时,会首先检查该类型是…

    Java 2023年5月26日
    00
  • Java类加载器的作用是什么?

    Java类加载器的作用是将类文件加载到内存中,并使其能够被Java虚拟机识别。在Java中,类的加载是在其被首次引用时完成的,而类加载器则是负责协调和完成这个任务的组件。 Java类加载器的主要作用包括: 将.class文件加载到JVM中 确定每个类在JVM中的唯一性 保证不同类的可见性 实现类的动态加载和卸载 实现Java程序的模块化开发 Java类加载器…

    Java 2023年5月11日
    00
  • Java锁的作用是什么?

    Java锁的作用是什么? Java锁是Java中用于实现多线程同步的一种机制,它能够解决并发访问共享资源时可能出现的数据竞争和并发安全性问题,保证多个线程之间的共享数据的正确性。 Java锁的分类 Java锁主要分为以下两种: 互斥锁(exclusive lock),是一种基于排他性访问机制的锁,同一时间内只允许一个线程访问共享资源,其他线程必须等待该线程完…

    Java 2023年5月11日
    00
  • Java8新特性之lambda(动力节点Java学院整理)

    Java8新特性之lambda——完整攻略 什么是lambda表达式 lambda表达式是一种能够传递行为的对象,是一个匿名函数,它没有名称、修饰符和返回类型,但是它可以像方法一样接受参数和返回值,并且可以被赋值给一个变量,它是Java8中一个非常重要的特性。 lambda表达式的语法 lambda表达式的语法如下: (parameter) -> ex…

    Java 2023年5月26日
    00
  • 关于iframe的一点发现与思考

    那么首先让我们来解释一下文章标题中提到的 iframe 是什么东西。 什么是 iframe? iframe 是一种 HTML 元素,用于在当前页面中嵌入其他网页。通过 iframe,我们可以在一张网页中嵌入另一个网页,并且可以在我们网页的其他元素之上或之下显示它。 例如,下面这段 HTML 代码通过 iframe 将百度搜索界面嵌入到当前页面中: <i…

    Java 2023年6月15日
    00
  • 10个微妙的Java编码最佳实践

    下面是“10个微妙的Java编码最佳实践”的详细攻略: 1. 始终使用@Override注解 Java 5 中引入了 @Override 注解,该注解用于表示方法重写。虽然在使用时并不是必须的,但如果我们在重写一个方法时没有添加 @Override 注解,极有可能出现意想不到的错误,比如拼写错误或参数数量不足等。因此,我们应该始终在重写方法时添加 @Over…

    Java 2023年5月19日
    00
  • Mybatis超详细讲解构建SQL方法

    “Mybatis超详细讲解构建SQL方法”是一篇关于Mybatis框架中构建SQL方法的详细攻略。该攻略主要介绍了Mybatis框架中构建SQL的方式及其相关技巧。 前置知识 在学习本篇攻略前,需要对以下知识点有一定的了解: Mybatis框架的使用及基本概念 SQL语句的基本语法及特性 Java的基本语法及编程思想 构建SQL方法 在Mybatis框架中,…

    Java 2023年5月19日
    00
  • Spring MVC如何实现接口Controller定义控制器

    在 Spring MVC 中,我们可以通过定义控制器来处理请求。控制器是一个 Java 类,用于处理请求并返回响应。在 Spring MVC 中,我们可以使用接口 Controller 来定义控制器。本文将详细讲解 Spring MVC 如何实现接口 Controller 定义控制器的完整攻略,包括如何创建控制器、如何处理请求、如何返回响应等。 创建控制器 …

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