使用模型对象和单例类的 JDBC

原文:https://www . geesforgeks . org/JDBC-使用模型-对象-单例-类/

本文解释了如何使用一个模型对象和一个来自 MySQL 数据库单例 连接类来执行 JDBC 操作。

【JDBC】是一个用于 Java 的应用程序编程接口,它将一个 Java 应用程序与一个数据库连接起来以执行 CRUD 操作。

先决条件:

模型类 : 模型类在 MVC 模式中被高度使用,它作为业务逻辑和视图之间的中间媒介。通常,模型包含特定实体的一些变量和方法。

Singleton 类 : Singleton 类是一种软件设计模式,确保该类只有一个实例。实现单例类有多种方式。

方法:我们将创建一个包含雇员表的组织数据库。我们还将创建一个与组织数据库连接的 java 应用程序。连接将由包含所有必要驱动程序信息的单例类建立。在 java 应用程序中,我们将使用 Employee 的模型对象执行一些数据操作任务,如插入、删除、更新和检索。

  1. 创建 MySQL 数据库和表:

    ```sql create database org; use org; create table employee( emp_id int auto_increment, emp_name varchar(400), emp_address varchar(400), primary key (emp_id) );

    ```

  2. Project setup in eclipse:

    • 在 eclipse 中创建一个名为“jdbc”的项目
    • 在该项目中创建一个名为“jars”的文件夹,并将 MySQL J Connector 粘贴到该文件夹中
    • 向 java 构建路径添加 jar
    • 创建 4 个包:com.jdbc.util、com.jdbc.dao、com.jdbc.model 和 com.jdbc.main

  3. 数据库连接:在 com.jdbc.util 包中创建单例连接类 Database connection。在变量用户上使用您的 MySQL 用户名和密码,然后通过。仔细看“url”变量的最后一部分。必须保持名称与数据库名称相同。我的数据库的名称是“org”,这就是为什么我把“org”放在 URL 变量中。

    数据库连接类

    ```sql package com.jdbc.util;

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;

    public class DatabaseConnection {

    private static Connection con = null;

    static     {         String url = "jdbc:mysql:// localhost:3306/org";         String user = "root";         String pass = "root";         try {             Class.forName("com.mysql.jdbc.Driver");             con = DriverManager.getConnection(url, user, pass);         }         catch (ClassNotFoundException | SQLException e) {             e.printStackTrace();         }     }     public static Connection getConnection()     {         return con;     } } ```

  4. 模型类:在 com.jdbc.model 包中创建一个名为 Employee 的模型类。它应该包含作为变量的所有属性。

    模型类

    ```sql package com.jdbc.model;

    public class Employee {

    int emp_id;     String emp_name;     String emp_address;

    public Employee() {}

    public Employee(String emp_name, String emp_address)     {         this.emp_name = emp_name;         this.emp_address = emp_address;     }

    public int getEmp_id()     {         return emp_id;     }

    public void setEmp_id(int emp_id)     {         this.emp_id = emp_id;     }

    public String getEmp_name()     {         return emp_name;     }

    public void setEmp_name(String emp_name)     {         this.emp_name = emp_name;     }

    public String getEmp_address()     {         return emp_address;     }

    public void setEmp_address(String emp_address)     {         this.emp_address = emp_address;     }

    @Override     public String toString()     {         return "Employee [emp_id=" + emp_id + ",  emp_name=" + emp_name + ",  emp_address=" + emp_address + "]";     } } ```

  5. 数据库访问对象(DAO): 我们将创建一个 EmployeeDao 接口和另一个实现 EmployeeDao 的 EmployeeDao 实现类。这个实现的类将被用作执行 CRUD 操作的 DAO。我们将使用 PreparedStatement 来执行查询。PreparedStatement 有 3 种特殊方法:

    员工个人界面

    ```sql package com.jdbc.dao;

    import java.sql.SQLException; import java.util.List;

    import com.jdbc.model.Employee;

    public interface EmployeeDao {

    public int add(Employee emp)         throws SQLException;     public void delete(int id)         throws SQLException;     public Employee getEmployee(int id)         throws SQLException;     public List getEmployees()         throws SQLException;     public void update(Employee emp)         throws SQLException; } ```

    员工实施类

    ```sql package com.jdbc.dao;

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

    import com.jdbc.model.Employee; import com.jdbc.util.DatabaseConnection;

    public class EmployeeDaoImplementation     implements EmployeeDao {

    static Connection con         = DatabaseConnection.getConnection();

    @Override     public int add(Employee emp)         throws SQLException     {

    String query             = "insert into employee(emp_name, "               + "emp_address) VALUES (?, ?)";         PreparedStatement ps             = con.prepareStatement(query);         ps.setString(1, emp.getEmp_name());         ps.setString(2, emp.getEmp_address());         int n = ps.executeUpdate();         return n;     }

    @Override     public void delete(int id)         throws SQLException     {         String query             = "delete from employee where emp_id =?";         PreparedStatement ps             = con.prepareStatement(query);         ps.setInt(1, id);         ps.executeUpdate();     }

    @Override     public Employee getEmployee(int id)         throws SQLException     {

    String query             = "select * from employee where emp_id= ?";         PreparedStatement ps             = con.prepareStatement(query);

    ps.setInt(1, id);         Employee emp = new Employee();         ResultSet rs = ps.executeQuery();         boolean check = false;

    while (rs.next()) {             check = true;             emp.setEmp_id(rs.getInt("emp_id"));             emp.setEmp_name(rs.getString("emp_name"));             emp.setEmp_address(rs.getString("emp_address"));         }

    if (check == true) {             return emp;         }         else             return null;     }

    @Override     public List getEmployees()         throws SQLException     {         String query = "select * from employee";         PreparedStatement ps             = con.prepareStatement(query);         ResultSet rs = ps.executeQuery();         List ls = new ArrayList();

    while (rs.next()) {             Employee emp = new Employee();             emp.setEmp_id(rs.getInt("emp_id"));             emp.setEmp_name(rs.getString("emp_name"));             emp.setEmp_address(rs.getString("emp_address"));             ls.add(emp);         }         return ls;     }

    @Override     public void update(Employee emp)         throws SQLException     {

    String query             = "update employee set emp_name=?, "               + " emp_address= ? where emp_id = ?";         PreparedStatement ps             = con.prepareStatement(query);         ps.setString(1, emp.getEmp_name());         ps.setString(2, emp.getEmp_address());         ps.setInt(3, emp.getEmp_id());         ps.executeUpdate();     } } ```

    • executeQuery():用于检索数据
    • executeUpdate():用于插入、更新、删除
    • execute():用于创建
    • 测试应用程序:最后,是时候使用 EmployeeDaoImplementation 的所有方法来执行 CRUD 应用程序了。在 com.jdbc.main 包中创建一个 Application 类。

    驱动程序代码

    ```sql package com.jdbc.main;

    import java.sql.SQLException; import java.util.List;

    import com.jdbc.dao.EmployeeDaoImplementation; import com.jdbc.model.Employee;

    public class Application {

    public static void main(String[] args)         throws SQLException     {

    Employee emp = new Employee();         emp.setEmp_name("Haider");         emp.setEmp_address("Mars");         EmployeeDaoImplementation empDao             = new EmployeeDaoImplementation();

    // add         empDao.add(emp);

    // read         Employee e = empDao.getEmployee(1);         System.out.println(e.getEmp_id() + " "                            + e.getEmp_name() + " "                            + e.getEmp_address());

    // read All         List ls = empDao.getEmployees();         for (Employee allEmp : ls) {             System.out.println(allEmp);         }

    // update         Employee tempEmployee = empDao.getEmployee(1);         tempEmployee.setEmp_address("Asgard");         empDao.update(tempEmployee);

    // delete         empDao.delete(1);     } } ```

输出:

  • 对于插入操作,您必须查看组织数据库中的员工表。
  • 对于读取一项,使用 id 获取数据并打印到控制台。
  • 对于显示所有项目,只需调用方法并将其打印到控制台。
  • 更新操作应该将更新后的值更改到数据库中。
  • 删除操作将从数据库中删除该 id 的信息。