So nachdem nun mein TabelModel funktioniert durch die Hilfe im Forum, die nächsten zwei Probleme.
1. Vorheriger Eintrag wird überschrieben in der MySQL Datenbank
Ich hab ein JPanel mit Textfelder und einem Button zum eintragen eines neuen Datensatzes in die MySQL-DB. Folgendes Problem jetzt, der erste Eintrag funktioniert Problemlos, mach ich aber direkt danach einen zweiten Eintrag, legt er keinen neuen Datensatz an, sonder überschreibt mir den ersten. Werd leider nicht schlau wieso, und wie ich dies umgehen könnte. Hier der Code vom JButton
und hier der Code des Managers für die Eintragung:
(Hatte mich schon über em.flush oder em.clear informiert aber irgendwie halb mir alles nicht so ganz weiter)
Problem Nr2.
Bisher hab ich immer eine EntityClass abgefragt z.b. zeig mir alle Hersteller, dies funktioniert über das TabelModel in die Anzeige der JTabel super. Jetzt muss ich aber Daten über zwei Tabellen anzeigen. Wie zum beispiel
Leider funktioniert dies aber nicht wie gewünscht, denke fast dass das Problem am TabelModel liegen könnte.
Hier mal der Code der ManagerClass, für die Abfrage:
Die Abfrage ist erstmal noch gekürzt auf 1 Fremdschlüssel, danach folgen noch weitere, die Abfrage umfasst schlussendlich 8 Felder, wobei davon 4 in Fremdtabllen liegen, also werden dann noch weitere Joins benötigt. Aber zur Problemlösung hab ich es erst mal gekürzt.
Und dazu die passende Stelle aus dem TabelModel:
Meine Vermutung bisher dass ich mit der Methode "Baustein row = bausteinList.get(rowIndex)". Nicht an die Daten vom resultSet rankomme, da wohl mehrere Objekte in der ArrayList stehen. Weiss aber leider nicht, wie ich dies jetzt ummändern muss.
Ich hoffe Ihr könnt mir weiterhelfen, mit Code ergänzungen, Fehlerbeseitung, Hilfestellung oder sonstiges wass mich irgendwie weiterbringt. Vielen vielen Dank
1. Vorheriger Eintrag wird überschrieben in der MySQL Datenbank
Ich hab ein JPanel mit Textfelder und einem Button zum eintragen eines neuen Datensatzes in die MySQL-DB. Folgendes Problem jetzt, der erste Eintrag funktioniert Problemlos, mach ich aber direkt danach einen zweiten Eintrag, legt er keinen neuen Datensatz an, sonder überschreibt mir den ersten. Werd leider nicht schlau wieso, und wie ich dies umgehen könnte. Hier der Code vom JButton
Java:
private void jButtonHerstEinActionPerformed(java.awt.event.ActionEvent evt) {
man.neuerHersteller(jTextFieldName.getText(), jTextFieldWeb.getText(), jTextAreaBem.getText()); // Manager wird aufgerufen, für die Eintragung
jLabelNeuHerstOk.setText("Hersteller wurde eingetragen"); // Bestätigung in der GUI
model.refresh(); // TabelModel refresh
(Hatte mich schon über em.flush oder em.clear informiert aber irgendwie halb mir alles nicht so ganz weiter)
Java:
public Object neuerHersteller(String herstellerName, String herstellerWeb, String herstellerBemerkung) {
try {
hersteller.setHerstellerName(herstellerName);
hersteller.setHerstellerWeb(herstellerWeb);
hersteller.setHerstellerBemerkung(herstellerBemerkung);
em.getTransaction().begin();
em.persist(hersteller);
em.getTransaction().commit();
return hersteller;
} catch (Exception e) {
em.getTransaction().rollback();
return -1;
}
}
Problem Nr2.
Bisher hab ich immer eine EntityClass abgefragt z.b. zeig mir alle Hersteller, dies funktioniert über das TabelModel in die Anzeige der JTabel super. Jetzt muss ich aber Daten über zwei Tabellen anzeigen. Wie zum beispiel
SQL:
SELECT baustein.bausteinname, hersteller.herstellername FROM Baustein INNER JOIN Hersteller ON baustein.hersteller_id = hersteller.hersteller_id
Hier mal der Code der ManagerClass, für die Abfrage:
Die Abfrage ist erstmal noch gekürzt auf 1 Fremdschlüssel, danach folgen noch weitere, die Abfrage umfasst schlussendlich 8 Felder, wobei davon 4 in Fremdtabllen liegen, also werden dann noch weitere Joins benötigt. Aber zur Problemlösung hab ich es erst mal gekürzt.
Java:
public class Manager {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("DB1PU");
EntityManager em = emf.createEntityManager();
Baustein baustein = new Baustein(); // Entity Class
public List<Baustein> bausteinList = new ArrayList<>();
public List alleBaustein() {
bausteinList = em.createQuery("SELECT b.bausteinName, h.herstellerName FROM Baustein b, Hersteller h WHERE b.herstellerId = h.herstellerId").getResultList();
return bausteinList;
}
Java:
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Baustein row = bausteinList.get(rowIndex);
if (0 == columnIndex) {
return row.getBausteinName();
} else if (1 == columnIndex) {
return row.getHerstellerName();
}
return null;
}
Ich hoffe Ihr könnt mir weiterhelfen, mit Code ergänzungen, Fehlerbeseitung, Hilfestellung oder sonstiges wass mich irgendwie weiterbringt. Vielen vielen Dank