2016-08-11 73 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());