2016-11-08 50 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:尝试在将对象插入列表时尝试修复对象的位置,以避免出现比预期更高的顺序。