JTable an andere Klasse übergeben

max514

Bekanntes Mitglied
Hey ich bins schon wieder, ich versuch grad eine Methode zu entwickeln die den jTable in meine mysql speichert.
Java:
package Auftrags;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;


/**
 *
 * @author kp
 */
public class Speichern {
    Connection con = null;
    ResultSet rst = null;
    PreparedStatement pst = null;
    MainWindow m = new MainWindow();
    
 
 
 
    public void S(){

        try{
 
 
  int rows=jTable.getRowCount();
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/meinedb","root","root123");
  String delete ="DELETE FROM db.mytable";
  pst = con.prepareStatement(delete);
  pst.execute();
  int b  = 0;
  int m = 0;
  int f = 0;
  int v = 0;
  int af = 0;
  for(int row = 0; row<rows; row++)
  {
    Integer auftragsnummer = (Integer)jTable.getValueAt(row, 0);
    String auftragsdatum = (String)jTable.getValueAt(row, 1);
    String auftraggeber = (String)jTable.getValueAt(row, 2);
    String telefon = (String)jTable.getValueAt(row, 3);
    String email = (String)jTable.getValueAt(row, 4);
    String lieferadresse = (String)jTable.getValueAt(row, 5);
    String beschreibung = (String) jTable.getValueAt(row, 6);
    Integer menge = (Integer)jTable.getValueAt(row, 7);
    Double preis = (Double)jTable.getValueAt(row, 8);
    Double gesammtpreis = (Double)jTable.getValueAt(row, 9);
    Boolean bezahlt = (Boolean)jTable.getValueAt(row, 10);
    if (bezahlt == true){
        b = 1;
    }
    Integer materialbestellzeit = (Integer)jTable.getValueAt(row, 11);
    String materialbestellen = (String)jTable.getValueAt(row, 12);
    Boolean materialbestellt = (Boolean)jTable.getValueAt(row, 13);
    if (materialbestellt == true){
        m = 1;
    }
    Integer fertigungszeit = (Integer)jTable.getValueAt(row, 14);
    String fertigungsbeginn = (String)jTable.getValueAt(row, 15);
    Boolean fertiggestellt = (Boolean)jTable.getValueAt(row, 16);
    if (fertiggestellt == true){
        f = 1;
    }
    Integer lieferzeit = (Integer)jTable.getValueAt(row, 17);
 
    String versenden = (String)jTable.getValueAt(row, 18);
    Boolean versendet = (Boolean)jTable.getValueAt(row, 19);
    if (versendet == true){
        v = 1;
    }
    String beimkunden = (String)jTable.getValueAt(row, 20);
    Boolean auftragfertig = (Boolean)jTable.getValueAt(row, 21);
    if (versendet == true){
        af = 1;
    }
 
       
    String sql = "INSERT INTO db.mytable (auftragsnummer,auftragsdatum,auftraggeber,telefon, email,lieferadresse, beschreibung,   "
            + "menge, preis, gesammtpreis, bezahlt,materialbestellzeit, materialbestellen, materialbestellt,fertigungszeit, fertigungsbeginn, fertiggestellt, "
            + "lieferzeit,versenden, versendet, beimkunden, auftragfertig) "
            + "VALUES ('"+auftragsnummer+"' ,'"+auftragsdatum+"','"+auftraggeber+"','"+telefon+"','"+email+"','"+lieferadresse+"','"+beschreibung+"',"
            + " '"+menge+"', '"+preis+"', '"+gesammtpreis+"', '"+b+"','"+materialbestellzeit+"', '"+materialbestellen+"',"
            + " '"+m+"','"+fertigungszeit+"','"+fertigungsbeginn+"', '"+f+"','"+lieferzeit+"',  "
            + "'"+versenden+"', '"+v+"', '"+beimkunden+"','"+af+"' )";
    pst = con.prepareStatement(sql);
    pst.execute(); 
  }
  JOptionPane.showMessageDialog(null, "Erfolgreich gespeichert");
}
catch(Exception e){
 
}
    }
 
 
}

wie kann ich jetzt den jTable an speichern übergeben ?
 
Zuletzt bearbeitet:
Ich gehe jetzt nicht auf grundsätzliche Designfragen ein, da werde ich sonst nicht mehr fertig 🙂 Daher nur ein paar Dinge:

1. man speichert keine JTable, höchstens das TableModel
2. Du brauchst Deiner Methode nur einen Parameter zu spendieren, um ihr das TableModel mitzugeben.
3. Strukturiere Deinen Code (Du darfst mehr als eine Methode in einer Klasse haben ;-))
4. Verwende halbwegs vernünftige Bezeichner (der Methodenname S ist z. B. völlig für die Tonne. Erstens sagt "S" gar nichts aus und zweitens schreibt man Methodennamen in lowerCamelCase. Ähnliches gilt für Deine Variablen b,m,f,v,af)
5. Nie(!) selbst Parameter in einen SQL-String einfügen. Du verwendest sowieso schon ein PreparedStatement, dann kannst Du auch die angebotenen Methoden verwenden, um die Parameter zu setzen.
6. Verwende try-with-resources, damit die Ressourcen auch wieder sauber geschlossen werden
7. Leere catch-Blöcke sind tabu: füg wenigstens ein e.printStackTrace(); ein oder wirf eine passende Exception.
 

Zurück
Oben