2016-11-08 54 views
1

我正在實現一個接口setObject,它將接受String,int,double等數據類型,我將在我的Insert語句中使用它。但是當在我的數據庫中插入數據時,它給了我一個值[a,b,c] [a,b,c] [a,b,c]。我怎樣才能避免這種輸出?分割對象

接口:

public interface CallableStatement 
{ 
    ArrayList<Object> myList = new ArrayList<>(); 
    public void setObject(ArrayList<Object> myList); 

} 

public class Position implements CallableStatement 
{ 
    String departmentName; 
    String departmentType; 
    String departmentDescription; 

    public Position() 
    { 
     array(); 
    } 

    public void array() 
    { 
     ArrayList<Object> myList = new ArrayList<Object>(); 
     myList.add(departmentName); 
     myList.add(departmentType); 
     myList.add(departmentDescription); 
    } 


    @Override 
    public void setObject(ArrayList<Object> myList) 
    { 
     String query = "{call insertPositions(?,?,?)}"; 

     try(Connection con = DBUtil.getConnection(DBType.MYSQL); 
      java.sql.CallableStatement cs = con.prepareCall(query);) 
            //Prepare the stored procedure call 
     { 
      //Setting the parameters 
      cs.setObject(1, myList.toString()); 
      cs.setObject(2, myList.toString()); 
      cs.setObject(3, myList.toString()); 
      cs.executeUpdate(); 
     } 
     catch(SQLException e) 
     { 
      System.err.println("Error: "+e.getMessage()); 
      System.err.println("Error: "+e.getErrorCode()); 
      System.err.println("Error: "+e.getSQLState()); 
     } 
    } 
} 

GUI:

private void addDepartmentBtnActionPerformed(java.awt.event.ActionEvent evt) {             
    String departmentName = tfDepartmentName.getText(); 
    String departmentType = tfDepartmentType.getText(); 
    String departmentDescription = tfDescription.getText(); 

    ArrayList<Object> addPositionsList = new ArrayList<Object>(); 
    addPositionsList.add(departmentName); 
    addPositionsList.add(departmentType); 
    addPositionsList.add(departmentDescription); 

    CallableStatement cs = new Position(); 
    cs.setObject(addPositionsList); 

} 
+1

不好意思說,但是你的代碼在幾個方面被設計破壞了。請考慮使用Java持久性API或Spring Data。 –

回答

0
cs.setObject(1, myList.toString()); 
cs.setObject(2, myList.toString()); 
cs.setObject(3, myList.toString()); 

但是:

myList.toString() = [a,b,c] 

所以,很顯然,當你像這樣做,你會得到[一, b,c] [a,b,c] [a,b,c]作爲你的三個對象。

而是嘗試

cs.setObject(1, myList.get(0).toString()); 
cs.setObject(2, myList.get(1).toString()); 
cs.setObject(3, myList.get(2).toString()); 
+0

我明白了爲什麼我的數組中有多個值。 :) – Francisunoxx

+0

@Francisunoxx此外,它看起來像這裏有一個模式...像'cs.setObject(X,myList.get(X-1).toString());';) – AxelH

+0

@AxelH是的,這是部分的地方我錯了:) – Francisunoxx

1

我覺得這是probleme,cs.setObject(1, myList.toString());,其實你設置所有查詢參數來myList.toString()這給輸出:[a,b,c]爲每PARAM。
您可以使用myList.get(index#int)
PS:嘗試在將對象插入列表時嘗試修復對象的位置,以避免出現比預期更高的順序。