2016-08-11 77 views
1

员工是另一类中列出的对象。它具有字段name,departmentexperience。我使用主要方法创建一个Swing对象,接受任何新员工,然后调用addEmployees类。Java JDBC在写入数据库的方法中避免冗余代码?

什么如果我想在这个类中调用数据库创建更多的方法?我需要创建一个try/catch,设置变量'连接器',整个过程再次? 如果我想在同一个类中创建一个只设置namedepartment的方法,该怎么办?我是否需要添加冗余代码?

import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.PreparedStatement; 
    import java.sql.ResultSet; 
    import java.sql.SQLException; 
    import java.sql.Statement; 

公共类AddEmployees {

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"; 


} 

}

+0

我认为这个问题可能是不够具体,得到SO一个很好的答案。通常,您可以在程序启动时打开一次连接,然后将连接传递给'addEmployees'或您编写的任何其他数据库访问方法。 – cxw

+0

共享应用程序中的一个连接不是一个好主意。更好的解决方案是使用连接池,将连接传递给每个方法,并在尽可能最窄的范围内使用它。 – duffymo

回答

1

你的本能,以避免重复的代码是一个很好的一个。 DRY(不要重复自己)应该是所有程序员的基础。

而不是从头开始编写整个持久层,我建议从Spring和它的JdbcTemplate开始。他们在设计API方面做得非常出色,可让您专注于应用程序的需求。

+0

我试过了。当我试图在项目中添加验证器依赖项的时候,它不是正在构建的,对于maven tbh没有太多经验。使用gradle构建更容易吗? –

+1

我会说Maven和Gradle是等价的。你的Maven问题是一个单独的问题。试试Spring Boot及其指南:https://spring.io/guides – duffymo

1

那么对于初学者你可以把连接部分在它自己的方法是这样的:

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

然后每当你尝试启动一个数据库会话,你可以调用这个方法,这种方法可以分开从你的查询实际连接写:

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

如果你可以添加春天到您的项目,那么你可以使用JdbcTemplate大大简化数据库访问代码。

您的代码可以是这样的:

this.jdbcTemplate.update("INSERT INTO employees(name,department,experience) values(?,?,?)", 
     getName(), getDepartment(), getExperience());