SQL-Befehle werden manchmal nicht komplett übermittelt

Status
Nicht offen für weitere Antworten.

MrQ

Mitglied
Hallo erstmal,

ich habe folgendes Problem:
in einer MySQL-Datenbank werden Messwerte mit Zeit, einer Modul-ID und Kanal-ID eingetragen. Das klappt eigentlich auch prima, nur manchmal kommt der SQL-Befehl nur Bruchstückhaft bei der datenbank an.

Es kommen immer alle Werte der letzten 15 Minuten von mehereren Kanälen an, die auch Nullen enthalten. Um keine Nullwerte abzuspeichern, wird der gesamte String ein wenig kompliziert zusammen gebaut. Wie gesagt, das funktioniert auch alles
Folgendermaßen wird der SQL-Befehl zusammengebaut:

Code:
String sql ="INSERT INTO "+anlagendaten.datentabelle+" (zeit,mid,kid,wert) VALUES ";

[...]

if (wert != 0) {
	sql=sql+"('"+time+"',"+mid+","+kid+","+wert+")";
}
if ((h==(((int)(15/anlagendaten.speicherintervall))-1)) && (i==(anlagendaten.kanalanzahl-1))) {
    if (wert==0){
        index = sql.lastIndexOf( ',');
        sql= sql.substring(0, index);
    }
    sql=sql+";";
}
else {
    if (wert != 0){
        sql=sql+",";
    }	
}
tmpZaehler++;

Die Daten werden dann ganz normal eingetragen:

Code:
try {
      //System.out.println("Verbinde mit: logdata"+ServerTools.getYear());
       Connection cjdbc2 = DatabaseTools.connectDatabase("logdata"+ServerTools.getYear());
	PreparedStatement pstmt2 = cjdbc2.prepareStatement(sql);
	pstmt2.execute();
	cjdbc.close();
	cjdbc2.close();
	//System.out.println("Dateneintrag fertig");
} catch (Exception sqlex) {
	ServerDatenWriteLogger.error("Fehler: Anlage: "+anlagendaten.seriennummer);
	ServerDatenWriteLogger.error("Datenbankfehler: " + sqlex.getMessage());
	sqlex.printStackTrace();
}
In der MySQL-Logdatei sieht das ganze dann auch so aus:
69560 Prepare [1] INSERT INTO t7 (zeit,mid,kid,wert) VALUES ('06.06.21 07:45',11,54,280),('06.06.21 07:45',11,55,275),('06.06.21 07:45',11,56,285),('06.06.21 07:45',11,57,290),('06.06.21 07:45',11,58,285),('06.06.21 07:45',11,59,295),('06.06.21 07:45',11,60,285),('06.06.21 07:45',11,61,270),('06.06.21 07:45',11,62,305),('06.06.21 07:45',11,63,265),('06.06.21 07:45',11,404,459),('06.06.21 07:45',11,405,-96),('06.06.21 07:45',12,64,250),('06.06.21 07:45',12,65,255),('06.06.21 07:45',12,66,255),('06.06.21 07:45',12,67,255),('06.06.21 07:45',12,68,260),('06.06.21 07:45',12,69,220),('06.06.21 07:45',12,70,245),('06.06.21 07:45',12,71,245),('06.06.21 07:45',12,72,250),('06.06.21 07:45',12,73,260);
69560 Execute [1] INSERT INTO t7 (zeit,mid,kid,wert) VALUES ('06.06.21 07:45',11,54,280),('06.06.21 07:45',11,55,275),('06.06.21 07:45',11,56,285),('06.06.21 07:45',11,57,290),('06.06.21 07:45',11,58,285),('06.06.21 07:45',11,59,295),('06.06.21 07:45',11,60,285),('06.06.21 07:45',11,61,270),('06.06.21 07:45',11,62,305),('06.06.21 07:45',11,63,265),('06.06.21 07:45',11,404,459),('06.06.21 07:45',11,405,-96),('06.06.21 07:45',12,64,250),('06.06.21 07:45',12,65,255),('06.06.21 07:45',12,66,255),('06.06.21 07:45',12,67,255),('06.06.21 07:45',12,68,260),('06.06.21 07:45',12,69,220),('06.06.21 07:45',12,70,245),('06.06.21 07:45',12,71,245),('06.06.21 07:45',12,72,250),('06.06.21 07:45',12,73,260)
69559 Quit

Manchmal passiert aber folgendes:

58712 Prepare [1] INSERT INTO t5 (zeit,mid,kid;
58712 Query INSERT INTO t5 (zeit,mid,kid

Ich weiß leider nicht, woran das liegen könnte. Oder ich sehe den Wald vor lauter Bäumen nicht.
Vielleicht hat ja jemand eine Idee.

Gruß Jens
 

MrQ

Mitglied
Ich habe den Fehler wahrscheinlich schon gefunden. Wenn alle Werte Null sind, schneidet meine Routine den String nach dem kid ab, da es dann das letzte Komma ist.
Mal schauen, wie ich das dann löse.
Vielleicht hat da ja jemand eine Idee.

Gruß Jens
 

MrQ

Mitglied
Mache ich auch bei allen anderen Datenbankzugriffen. Aber hier weiß ich ja nicht, wie meine eigentliche Abfrage aussehen wird.
Bei PrepareStatement steht doch die Syntax der Abfrage fest und ich änder nur noch die Variablen. Oder irre ich mich da.

Gruß Jens
 

SamHotte

Top Contributor
Sehen deine Abfragen denn nicht alle gleich aus? Irgendwie kam mir das schon so vor, dass sich nur die Werte ändern ...
 

DP

Top Contributor
und gewöhne dir am besten direkt an, anstatt

Code:
String sql ="INSERT INTO "+anlagendaten.datentabelle+" (zeit,mid,kid,wert) VALUES ";

nen stringbuffer zu nutzen. sonst dreht sich bei größeren datenmengen dein blech nicht mehr
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
S Java und SQL-Befehle Datenbankprogrammierung 6
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
K SQL Befehle über java Oberfläche Datenbankprogrammierung 4
C H2 H2 Befehle Datenbankprogrammierung 3
A SQL-Befehle lassen sich nicht ausführen Datenbankprogrammierung 6
Meldanor Eingaben auf SQL Befehle überprüfen Datenbankprogrammierung 13
N Welche Befehle? Datenbankprogrammierung 4
C SQL Befehle ausführen und deren Ergebnisse verarbeiten Datenbankprogrammierung 3
V "Spezielle" SQL Befehle Datenbankprogrammierung 3
C hsqldb Befehle in Java Datenbankprogrammierung 19
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
T Datenzeilen werden nicht gelöscht Datenbankprogrammierung 6
S Variable in main soll mit der generierten Zahl aus einer Methode ausgefüllt werden Datenbankprogrammierung 3
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
pkm PostgreSQL Auf eine Spalte kann aus einem Teil der SQL-Aussage nicht zugegriffen werden Datenbankprogrammierung 3
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
JG12111989 DB-Daten werden falsch dargestellt Datenbankprogrammierung 7
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
I Es kann keine Verbindung zum Server aufgebaut werden Datenbankprogrammierung 12
Ananaskirsche Datenbanktreiber kann nicht geladen werden Datenbankprogrammierung 2
E Warum werden für Datenbanktabellen Schemanamen festgelegt? Datenbankprogrammierung 1
E Warum kann mein SQL-File nicht in DB2 ausgeführt werden? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
T Tabellen von nicht mehr vorhandenen Entities werden generiert Datenbankprogrammierung 0
J MySQL Workbench Tabellen werden verschoben Datenbankprogrammierung 1
B Nur 99% der Datensätze werden in Tabelle geschrieben Datenbankprogrammierung 2
D [xBaseJ] Datei kann nicht geöffnet werden Datenbankprogrammierung 2
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
R Datenbankverbindung kann nicht hergestellt werden Datenbankprogrammierung 8
Kandum MySQL Anzahl gefundener Datensätze bleibt gleich, auch wenn mehr existieren und ausgegeben werden Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
D MySQL Treiber konnte nicht geladen werden Datenbankprogrammierung 3
D MySQL Daten werden aus Datenbank gelesen, obwohl sie dort gar nicht angekommen sind Datenbankprogrammierung 8
L SQLite Daten werden nicht in die Tabelle eingefügt Datenbankprogrammierung 7
D Können nur angesehende Datensätze geloggt werden? Datenbankprogrammierung 4
T Umlaute werden aus der *.mdb nicht gelesen Datenbankprogrammierung 3
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
B Es werden keine Tupel in Tabellen abgelegt Datenbankprogrammierung 2
N Connection kann nicht geschlossen werden!? Datenbankprogrammierung 4
S Hibernate - Abgeleitete Klassen werden nicht angezeigt wenn... Datenbankprogrammierung 6
S Embedded DB, die aus mehreren JVMs gestartet werden kann? Datenbankprogrammierung 10
H Oracle - Indizes werden nicht genommen Datenbankprogrammierung 6
S Identitätsspalte kann nicht aktualisiert werden Datenbankprogrammierung 11
G hibernate.cfg.xml kann nicht gefunden werden. Datenbankprogrammierung 3
B Datenbankverbindung kann nicht aufgebaut werden. Datenbankprogrammierung 2
ARadauer Wann werden Daten übertragen bzw geladen Datenbankprogrammierung 5
P Es werden keine Daten mehr in die Tabelle eingefügt Datenbankprogrammierung 4
T Hibernate - wie werden Kind-Objekte nachgeladen? Datenbankprogrammierung 3
G Daten werden nicht in die datenbank geschrieben Datenbankprogrammierung 6
M werden executeBatch()-commandos automatisch commitet ? Datenbankprogrammierung 8
H Verbindung mit Connector/J kann nicht aufgebaut werden Datenbankprogrammierung 3
S MySQL und Java: Falsche Daten werden ausgelesen Datenbankprogrammierung 9
M Die gezogenen Daten werden nicht richtig ins JTableeingefügt Datenbankprogrammierung 8
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
H manchmal komische sonderzeichen Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben