Java JDBC在写入数据库的方法中避免冗余代码?

Java JDBC在写入数据库的方法中避免冗余代码?,java,mysql,jdbc,Java,Mysql,Jdbc,Employees是另一个类中列出的对象。它有名称、部门和经验字段。我使用main方法创建Swing对象,接收任何新员工,并调用addEmployees类 如果我想在这个类中创建更多调用数据库的方法呢?我是否需要创建一个try/catch,设置变量“connector”,然后重新开始整个过程? 如果我想在同一个类中创建一个只设置名称和部门的方法,该怎么办?我需要添加冗余代码吗 import java.sql.Connection; import java.sql.DriverMa

Employees是另一个类中列出的对象。它有
名称
部门
经验
字段。我使用main方法创建Swing对象,接收任何新员工,并调用
addEmployees

如果我想在这个类中创建更多调用数据库的方法呢?我是否需要创建一个
try/catch
,设置变量“connector”,然后重新开始整个过程? 如果我想在同一个类中创建一个只设置
名称
部门
的方法,该怎么办?我需要添加冗余代码吗

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
公营雇员{

public String addEmployee(String name, String department, int experience){



    Connection connector = null; 
    PreparedStatement stmt = null;

    try {

            Class.forName("com.mysql.jdbc.Driver");
        // Load a connection to my DB
            String url = "jdbc:mysql://localhost:3306/myjobsite";
            connector = DriverManager.getConnection(url, "golden", "password");
            String sql="INSERT INTO employees(name,department,experience) values(?,?,?)";
            stmt = connector.prepareStatement(sql);
            stmt.setString(1, name);
            stmt.setString(2, department);
            stmt.setInt(3, experience);
            stmt.execute();      //run sql 


    } catch (SQLException e) {
        // TODO Auto-generated catch block
        return "Connection Failure";

    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return "Executed sql";


}

}你避免重复代码的本能是好的。DRY(不要重复你自己)应该是所有程序员的基本原则


我建议从Spring及其JdbcTemplate开始,而不是从头开始编写整个持久性层。他们在设计API方面做得很好,可以让您专注于应用程序所需的内容。

对于初学者,您可以将连接部分放在自己的方法中,如下所示:

public void connectToDb(){
try {

            Class.forName("com.mysql.jdbc.Driver");
            // Load a connection to my DB
            String url = "jdbc:mysql://localhost:3306/myjobsite";
            connector = DriverManager.getConnection(url, "golden", "password");

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        return "Connection Failure";

    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
this.jdbcTemplate.update("INSERT INTO employees(name,department,experience) values(?,?,?)",
        getName(), getDepartment(), getExperience());
然后,无论何时尝试启动数据库会话,都可以调用此方法,这样可以将实际连接与必须编写的查询分开:

public String employeMethod(){
      connectToDb();
      //write your query stuff here
}

如果您可以将Spring添加到项目中,那么您可以使用它来大大简化数据库访问代码

您的代码可以如下所示:

public void connectToDb(){
try {

            Class.forName("com.mysql.jdbc.Driver");
            // Load a connection to my DB
            String url = "jdbc:mysql://localhost:3306/myjobsite";
            connector = DriverManager.getConnection(url, "golden", "password");

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        return "Connection Failure";

    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
this.jdbcTemplate.update("INSERT INTO employees(name,department,experience) values(?,?,?)",
        getName(), getDepartment(), getExperience());

我认为这个问题可能不够具体,因此无法得到一个好的答案。通常,您可以在程序启动时打开一次连接,然后将连接传递给
addEmployees
或您编写的任何其他数据库访问方法。在共享应用程序中建立一个连接不是一个好主意。更好的解决方案是使用连接池,将连接传递给每个方法,并在尽可能窄的范围内使用它。当我尝试在maven中为一个项目添加验证器依赖项时,它并没有构建,在maven tbh方面没有太多经验。使用gradle构建更容易吗?我想说Maven和gradle是等价的。你的Maven问题是另一个问题。尝试Spring Boot及其指南: