2016-11-08 3 views
1

私はInsert文でこれを使用するString、int、doubleなどのデータ型を受け入れるインターフェイスsetObjectを実装しています。しかし、私のデータベースにデータを挿入するとき、それは私に値[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 Persistence 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]を3つのオブジェクトとして表示します。すべてのPARAMため[a,b,c]

代わりに、私はこれがproblemeだと思う

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

を試し、cs.setObject(1, myList.toString());は、実際には、あなたが出力を与えるmyList.toString()にすべてのクエリのparamsを設定します。
myList.get(index#int)を使用できます。
PS:予想外の順序を避けるために、オブジェクトをリストに挿入するときにオブジェクトの位置を固定してみてください。