Datenbank verbindung

max514

Bekanntes Mitglied
Hi Leute, ich hab folgendes problem: ich möchte meinen jTable in meiner Datenbank speichern. Hier ist der Code:

Java:
try{

Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost/meinedb","root","root123");
con.setAutoCommit(false);
  int rows=jTable.getRowCount();

  for(int row = 0; row<rows; row++)
  {  
    String auftragsdatum = (String)jTable.getValueAt(row, 0);
    String beschreibung = (String) jTable.getValueAt(row, 1);
    String auftraggeber = (String)jTable.getValueAt(row, 3);
    String query = "Insert into meinedb(auftragsdatum,beschreibung,auftraggeber) values ('"+auftragsdatum+"','"+beschreibung+"','"+auftraggeber+"')";

    pst = con.prepareStatement(query);
    pst.execute();    
  }
  JOptionPane.showMessageDialog(null, "Successfully Save");
}
catch(Exception e){
  JOptionPane.showMessageDialog(this,e.getMessage());
}

wenn ich jetzt keine daten zum jtable hinzufüge funktioniert das aber sobald ein Eintrag drinne ist sagt mir der messagedialog das der table meinedb.meinedb nicht existiert
 
Zuletzt bearbeitet von einem Moderator:
Der Grund für diese Fehlermeldung ist, dass die Tabelle "meinedb" im Schema "meinedb" nicht existiert. Hast du die Tabelle denn bereits mit einem CREATE TABLE in deinem Programm oder über einen anderen SQL-Editor bzw. eine andere Datenbank-Pflegeoberfläche angelegt?

Desweiteren gibt es noch einige andere Fehler und Unschönheiten:
1. Du stellst die Connection auf autocommit=false, committest dann aber die Änderungen niemals.
2. Du verwendest zwar ein PreparedStatement, nutzt es aber nicht als solches, insbesondere was das Setzen von Parameterwerten angeht.
 
so sieht des im moment aus bei mir ich hab halt noch nie mit datenbanken gearbeitet
 

Anhänge

  • Screenshot (5).png
    Screenshot (5).png
    148,2 KB · Aufrufe: 52
Jetzt mal ehrlich: Wenn deine Tabelle schon "aufträge" heißt, bist du nicht selber mal auf die Idee gekommen, dass dann dieser Name wohl auch iiiiirgendwo in deinen SQL-Statements (z.B. im INSERT Statement) auftauchen muss?
Oder einfach mal nach der generellen Syntax eines SQL INSERT Statements zu googlen und dann zu sehen, dass nach INSERT INTO ja der Tabellenname kommt?
 
Ich denke Prepared Statements bei einer JAVA Client App sind ziemlich überflüssig. Da ist es eh überhaupt kein Problem sich die DB Verbindungsdaten aus dem Code zu holen und mit der DB zu machen was man will. Da muss ich nicht mit irgendwelchen Injections rumbasteln...
 
mit irgendwelchen Injections rumbasteln...
Bei einer privaten Sache spielt das sicher keine Rolle. Aber der Verweis auf den Artikel diente als Hinweis, zudem könnte man irgendwann für einen grösseren Personenkreis programmieren...
 
Bei einer privaten Sache spielt das sicher keine Rolle. Aber der Verweis auf den Artikel diente als Hinweis, zudem könnte man irgendwann für einen grösseren Personenkreis programmieren...

Hat ja nichts mit privat oder großer Kreis zu tun. In dem Moment wo Du die Verbindungsdaten in den Code schreibst hast Du verloren...
 
Ne ich hab mir ein youtube video angeschaut bei dem man nicht gesehen hat das der table genau so wie die DB heißt von dem her war ich verwirrt warum des bei dem Funktioniert und bei mir nicht. Außerdem ist des meine erste Datenbank die ich je gemacht.
 
Nochmal ne frage 🙁 des funktionier jetzt zwar aber jedes mal wenn ich auf speichern drück überträgt es mir den ganzen jTable . gibt es eine möglichkeit den alten table in der Database zu entfernen bevor ich abspeicher und wenn ja wie ?? Ich hab zwar den Sql befehl Delete From Where ... gefunden weiß aber nicht so richtig wie ich auf den table zugreif ???

(Hier vor code ganzen alten table entfernen)

Java:
for(int row = 0; row<rows; row++)
  { 
    Integer auftragsnummer = (Integer)jTable.getValueAt(row, 2);
    String beschreibung = (String) jTable.getValueAt(row, 1);
    String auftraggeber = (String)jTable.getValueAt(row, 3);
    String auftragsdatum = (String)jTable.getValueAt(row, 0);
    String sql = "INSERT INTO db.mytable (auftragsdatum, beschreibung, auftraggeber, auftragsnummer) VALUES ('"+auftragsdatum+"','"+beschreibung+"','"+auftraggeber+"','"+auftragsnummer+"')";
    pst = con.prepareStatement(sql);
    pst.execute();   
  }
  JOptionPane.showMessageDialog(null, "Successfully Save");
}
catch(Exception e){
  JOptionPane.showMessageDialog(this,e.getMessage());
}
[/java]
 

Neue Themen


Zurück
Oben