MySQL Daten werden aus Datenbank gelesen, obwohl sie dort gar nicht angekommen sind

D

dackelfrosch

Gast
Ich schreibe momentan an einem Programm, das Daten in eine Datenbank schreibt und aus dieser herausliest. Auf meinem Rechner funktioniert dies auch einwandfrei (sowohl aus Eclipse gestartet, wie auch die .jar).
Nun habe ich das Programm (als executable jar) aber auch auf die Rechner zweier Kollegen kopiert und ihnen den gleichen DB Server (MySQL 5.5) installiert. Auch die Java Version ist auf allen Rechnern die gleiche (7).

Das Problem: Bei meinen Kollegen werden neu angelegte Daten teilweise nicht in der Datenbank gespeichert. Es werden aber auch keine Fehler geworfen!
Das Kurioseste ist, dass das Programm, solange es geöffnet ist die Daten aber kennt und zwar indem es sie aus der DB ausliest!
Ein Beispiel um mein kurioses Problem zu verstehen. Das Programm bietet die Möglichkeit einen Datensatz anzulegen. An ganz anderer Stelle kann ein PopUp-Menu alle angelegten Datensätze anzeigen. Ich habe es hundertmal überprüft: das PopUp holt sich die Datensätze aus der Datenbank!

So wird das Menü befüllt (vereinfacht):
Java:
JPopupMenu opp = new JPopupMenu("Dienste");
try {
   List<Duty> duties = this.connector.findAllDutys();
   Collections.sort(duties);
   for (Duty dutyHelper : duties) {
       JMenuItem item = new JMenuItem(dutyHelper.getName());
       opp.add(item);
   }
}

Die Methode im Datenbank-Connector (vereinfacht):
Java:
public List<Duty> findAllDutys() throws SQLException 
	{
		List<Duty> duties = new ArrayList<Duty>();		
		
		Statement stmt = this.con.createStatement();
		ResultSet rs = stmt.executeQuery("SELECT * FROM DUTIES");
		while (rs.next()) {
			Duty duty = new Duty();
			duty.setDutyID(rs.getInt("DUTY_ID"));
			duty.setName(rs.getString("NAME"));
                        duties.add(duty);
		}

		rs.close();
		stmt.close();
		
		
		return duties;

	}

Man kann nun also einen Datensatz anlegen, im Programm hin und her klicken, einen Kaffee trinken gehen und was weiß ich nicht treiben, wenn man das PopUp-Menü öffnet sind die Daten drin.
Aber wenn ich in die Datenbank schaue, sind sie dort nicht! Wenn ich das Programm schließe und neu starte, sind auch dort die Daten nicht mehr zu sehen.

Wie gesagt, das Problem tritt nur bei meinen Kollegen auf und auch nicht immer.

Vll. noch zur Vervollständigung die Methode, die die Daten in die DB speichert:
Java:
public void createDuty(Duty duty) throws SQLException 
	{		
		Statement stmt = this.con.createStatement();

		stmt.executeUpdate("INSERT INTO DUTIES (NAME)"
				+ "VALUES ('"
				+ duty.getName()
				+")");

		stmt.close();		
	}

Ich bin dezent verzweifelt. Hat jemand eine Idee?
 
N

nillehammer

Gast
Puuhh, plain JDBC ist schon ganz schön her... aber versuch mal, nach Deinem executeUpdate ein commit() auf der Connection aufzurufen (also bei Dir this.con.commit() ). Oder hast du die Connection mit autoCommit=true aufgemacht?
 
D

dackelfrosch

Gast
Nee, das ist ein guter Einwand. Das werde ich mal machen und die Sache beobachten.
Wäre schön, wenn's klappt.
Danke!
 
C

Camino

Gast
Vll. noch zur Vervollständigung die Methode, die die Daten in die DB speichert:
Java:
public void createDuty(Duty duty) throws SQLException 
	{		
		Statement stmt = this.con.createStatement();

		stmt.executeUpdate("INSERT INTO DUTIES (NAME)"
				+ "VALUES ('"
				+ duty.getName()
				+")");

		stmt.close();		
	}

Ich bin dezent verzweifelt. Hat jemand eine Idee?

Hmm, mir ist hier aufgefallen, dass in dem SQL-Statement zwischen
Code:
(NAME)
und
Code:
VALUES
ein Leerzeichen fehlt. Keine Ahnung, ob das ausschlaggebend für das Problem ist. Ansonsten: wenn etwas aus der Datenbank ausgelesen wird, muss es ja auch drinstehen...
 
N

nillehammer

Gast
Wenn die Query syntaktisch falsch wäre, würdest Du eine Exception bekommen. Ich könnte mir in diesem Fall vorstellen, dass die DB das fehlende Leerzeichen akzeptiert, weil durch die schließende Klammer die Trennung eindeutig ist.

Aber, wo wir grad dabei sind, in der Query fehlt das schließende ' (also einfaches Tüddelchen). Das Zusammenbauen von Strings ist mit dem +, wie Du siehst schon bei drei Zeilen ziemlich unübersichtlich. Überlege, ob Du evtl. besser mit String.format oder mit einem StringBuilder arbeitest. String.format finde ich persönlich schöner, der StringBuilder ist aber performanter (wenn Du den Unterschied überhaupt bemerkst). Code könnte dann ungefähr so aussehen:
Java:
public class DutyDao {
  // Strings für Zusammenbau der Query mittels StringBuilder
  private static final String CREATE_DUTY_1 = "INSERT INTO DUTIES (NAME) VALUES ('";
  private static final String CREATE_DUTY_2 = "')";

  // String als Format für Zusammenbau der Query mittels String.format.
  private static final String CREATE_DUTY_FORMAT = "INSERT INTO DUTIES (NAME) VALUES ('%s')";

    public void createDutyWithStringBuilder(Duty duty) throws SQLException {  
        final String updateQuery = 
            new StringBuilder(CREATE_DUTY_1).append(duty.getName).append(CREATE_DUTY_2);

        doUpdate(updateQuery);         
    }

    public void createDutyWithStringFormat(Duty duty) throws SQLException {

        final String updateQuery = String.format(CREATE_DUTY_FORMAT, duty.getName);

        doUpdate(updateQuery);         
    }


    private static int doUpdate(final String updateQuery) throws SQLException {
        
        final Statement stmt = this.con.createStatement();
 
        final int updatedRowsCount = stmt.executeUpdate(updateQuery);
 
        stmt.close();

        return updatedRowsCount;
    }     
}
 
Zuletzt bearbeitet von einem Moderator:
D

dackelfrosch

Gast
Ja, ich werde definitiv noch auf prepared Statements wechseln. Das Programm ist größer angewachsen, als zunächst gedacht. Deswegen ist noch alles in einzelnen SQL-Strings. Und da ständig irgendwelche Neuerungswünsche eintrudeln ist das Refactoring ziemlich auf der Strecke geblieben...

Vielen Dank für die vielen Anmerkungen wg. dem "fehlerhaften" String. Das ist allerdings durchs Kürzen der Methode fürs Forum entstanden. Eigentlich ist der String viel länger, da mein Duty deutlich mehr Attribute halt, als ID und Namen.

Ich habe nillehammers Vorschlag umgesetzt und auf Auto-commit umgestellt. Bisher haben meine Kollegen aber noch nicht wieder mit dem Programm gearbeitet. Ich werde berichten, sobald es erste Erkenntnisse gibt!
 
D

dackelfrosch

Gast
Wollte mich wie versprochen nochmal melden: Es scheint bis jetzt zu funktionieren. Danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
G Daten werden nicht in die datenbank geschrieben Datenbankprogrammierung 6
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
JG12111989 DB-Daten werden falsch dargestellt Datenbankprogrammierung 7
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
ARadauer Wann werden Daten übertragen bzw geladen Datenbankprogrammierung 5
P Es werden keine Daten mehr in die Tabelle eingefügt Datenbankprogrammierung 4
S MySQL und Java: Falsche Daten werden ausgelesen Datenbankprogrammierung 9
M Die gezogenen Daten werden nicht richtig ins JTableeingefügt Datenbankprogrammierung 8
D Alte Daten ins neue Modell quetschen Datenbankprogrammierung 6
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
B Daten HSQL-DB Datenbankprogrammierung 2
V H2 ManyToMany wie speichere ich die Daten? Datenbankprogrammierung 10
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
OnDemand Daten verschlüsseln Datenbankprogrammierung 42
L Oracle Daten in Häppchen selektieren Datenbankprogrammierung 5
L Oracle Daten von Oracle zu MSSQL übertragen Datenbankprogrammierung 4
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Z Ausgabe nur bestimmter Daten Datenbankprogrammierung 6
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Kirby.exe Vorschläge zur Verschlüsselung von Daten in der DB Datenbankprogrammierung 2
T Java Spiel Daten speichern Datenbankprogrammierung 1
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
R Wie mit zu viele Daten umgehen? Datenbankprogrammierung 2
F MySQL Wie speichere ich Daten zeitlich abhängig? Datenbankprogrammierung 4
T Oracle Normalisierung und Daten splitten Datenbankprogrammierung 1
K H2 Daten in die H2 console DB eintragen Datenbankprogrammierung 2
L SQLite Ändern der Daten in einem UNIQUE Feld Datenbankprogrammierung 1
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
L Oracle Daten von einem Server zum andere kopieren Datenbankprogrammierung 24
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
L MySQL Vergleichen von Array-Inhalt, Ausgabe gleicher Daten Datenbankprogrammierung 3
W Daten in Java intern abfragen Datenbankprogrammierung 1
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
I MySQL Datenbankstruktur angleichen - Daten behalten Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
P LDAP: Daten eintragen funktioniert nicht Datenbankprogrammierung 7
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
O mit Multi-Thread Daten aus Datenbank lesen und schreiben Datenbankprogrammierung 22
F Daten verdichten Datenbankprogrammierung 0
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
B Daten aus DB in Word Dokument Datenbankprogrammierung 2
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
D Daten posten auf RestApi (Mongodb/NoSQL) Datenbankprogrammierung 0
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
OnDemand MySQL Daten aktualisieren Datenbankprogrammierung 6
D Daten von einem Server in eigenem Java-Programm benutzen Datenbankprogrammierung 6
M Vergleich von Daten in verschiedenen Tabellen Datenbankprogrammierung 1
S Daten aus Form in Datenbank nur einmal eintragen Datenbankprogrammierung 2
6 JBDC Daten verschlüsseln? Datenbankprogrammierung 2
F MySQL Daten ändern über Java Datenbankprogrammierung 3
G SQLite Daten aus SQLite DB in andere SQLite DB importieren Datenbankprogrammierung 4
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
M Daten nachträglich hinzufügen Datenbankprogrammierung 6
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
E Daten einer SQL-Datenbank aus Combobox in labels schreiben Datenbankprogrammierung 6
N HSQLDB Daten Auslesen Datenbankprogrammierung 3
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
SexyPenny90 SQL Daten sortieren und top 5 ausgeben Datenbankprogrammierung 7
L Hibernat will Daten nicht einfügen??? Datenbankprogrammierung 2
B MySQL DB Daten aktualisieren Datenbankprogrammierung 9
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
D Übersichtliche Zuweisung von Daten in Tabellen Datenbankprogrammierung 17
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
J Daten synchronisieren in Multi-Client-Anwendungen (Hibernate) Datenbankprogrammierung 6
S JPA: DB Schema ändern und Daten nicht verlieren - wie? Datenbankprogrammierung 5
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
F Daten in die DB hinzufügen Datenbankprogrammierung 7
H Klasse welche Mysql Daten zurück gibt Datenbankprogrammierung 18
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
H Daten in/aus Datenbank schreiben Datenbankprogrammierung 2
M DropDownBoxen mit MySQL Daten füllen Datenbankprogrammierung 3
E MySQL Daten in die Datenbank eingeben via Java Programm Datenbankprogrammierung 3
F ORA 17410 Keine weiteren Daten aus Socket zu lesen Datenbankprogrammierung 2
B Daten aus Datenbank holen Datenbankprogrammierung 6
T Problem beim schreiben von daten Datenbankprogrammierung 4
N Daten aus Datenbank abfragen und anzeigen in der Praxis?? Datenbankprogrammierung 2
G MySQL Bekomme keine Daten. Datenbankprogrammierung 7
G Daten aggregieren Datenbankprogrammierung 11
Gossi Oracle 2 Daten (Datum) vergleichen Datenbankprogrammierung 6
W MySQL Daten aus bestimmter Spalte lesen Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
J Doppelte Daten in Spalte, nur die erste abrufen wie? Datenbankprogrammierung 15
P Daten aus MySql Datenbank lesen??? Datenbankprogrammierung 6
J Daten vergleichen Datenbankprogrammierung 10
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
T Designfrage: DB-Daten direkt oder verzögert speichern Datenbankprogrammierung 2
Dragonfire Daten aus jsp Datei in datenbank speichern Datenbankprogrammierung 15
A Daten von Webshop einlesen Datenbankprogrammierung 5
S Daten aus jTextfiled in DB schreiben - SQL Befehl Datenbankprogrammierung 2
T Daten aus DB in variable Zahl an Variablen speichern Datenbankprogrammierung 18
A Datenbankanbindung an mySQL und Ein-/Auslesen der Daten Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben