2016-11-08 2 views
1

Ich implementiere eine Schnittstelle setObject, die String, int, double usw. Datentyp akzeptiert, wo ich das in meiner Insert-Anweisung verwenden werde. Aber wenn ich Daten in meine Datenbank einfüge gibt es Werte [a,b,c] [a,b,c] [a,b,c]. Wie kann ich diese Ausgabe vermeiden?Splitting-Objekt

Schnittstelle:

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

Entschuldigen Sie, dass Ihr Code durch Design auf verschiedene Arten beschädigt ist. Bitte beachten Sie die Java Persistence API oder Spring Data. –

Antwort

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

Aber:

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

So offensichtlich, wenn man es so tun, werden Sie [a bekommen, b, c] [a, b, c] [a, b, c] als deine drei Objekte.

Stattdessen versuchen

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

Ich sehe, warum ich mehrere Werte in meinem Array habe. :) – Francisunoxx

+0

@Francisunoxx Es sieht auch so aus, als wäre hier ein Muster ... wie 'cs.setObject (X, meineListe.get (X-1) .toString());';) – AxelH

+0

@AxelH Ja, das ist Teil wo Ich habe mich geirrt :) – Francisunoxx

1

Ich denke, das die Probleme ist, cs.setObject(1, myList.toString());, in der Tat, Sie alle Abfrage params auf myList.toString() gesetzt, die den Ausgang gibt: [a,b,c] für jeden Param.
Sie können myList.get(index#int) verwenden.
PS: versuchen Sie, die Positionen von Objekten zu fixieren, wenn Sie sie in Ihre Liste einfügen, um eine andere Reihenfolge als erwartet zu vermeiden.