Java – MySql – Beim Insert die angelegte ID des Primary Keys zurück bekommen

Beim Programmieren hatte ich eine für mich neue Anforderung: Ich wollte direkt nach dem Insert in die Datenbank den Primary Key des angelegten Datensatzes zurück bekommen. Die Lösung fand sich schnell im Netz und ich will sie aber für zukünftige Recherchen meinerseits gleich hier in meinem “Knowledge-Fundus” hier hinterlegen:

String insertQuery = "INSERT INTO TABLE (…) VALUES (?,?,?)";
PreparedStatement ps = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
ps.setInt(1,…);
ps.setInt(2,…);
ps.setInt(3,…);
ps.execute();
ResultSet rs = ps.getGeneratedKeys();
Integer idPrimarykey = null;
if (rs.next()){
idPrimarykey=rs.getInt(1);
}
return idPrimarykey; 

Das Kommando klappt in meinem Beispiel hervorragend mit MySql. Damit konnte ich diekt aus dem Insert den Primary Key ermitteln und direkt weiterverarbeiten.

Screenshots und Fernwartung mit SFirm nicht möglich

Nutzer von SFirm und anderen Starmoney-Produkten kennen das Problem seit März 2017. Beim Versuch, einen Screenshot zu machen oder mittels einer Fernwartungssoftware auf Sfirm zuzugreifen, wird die Software schwarz ausgeblendet.

“It’s not a Bug, it’s a feature”

Das Feature ist ein Bestandteil des ” Promon Shield” in der Applikation und ermöglicht den Datenschutz vor Fernzugriffen.
Der Anwender kann diese Funktion durch Drücken der DRUCK-Taste jedoch ganz einfach für die Sitzungsdauer deaktivieren.
Da die Meldung selbst auch vom Screenshot-Schutz betroffen ist, musste ich zur Veranschaulichung ein Bildschirm-Foto von der Meldung machen, deshalb entschuldigt bitte die schlechte Bildqualität:

Deaktivieren der Fernwartungs- und Screenshot-Sperre in SFIRM mit der Drucktaste

Ich hoffe Euch hat der Tipp auch geholfen. Ein Danke geht an diese Quelle

Ansagen für Alcatel Telefonanlagen in 8 Bit WAV 8 khz konvertieren

Ihr möchtet Eure Sounddatei für eine Telefonanlage wie Alcatel kompatibel machen? Dann seid ihr hier genau richtig!

Telefonanlagen großer Anbieter sind auch heute noch Mischungen aus alter und neuer Software. So verarbeiten die meisten Telefonanlagen auch heute nur 8 bit Mono-WAV-Dateien mit 8 Khz.

Mein erster Versuch, eine WAV-Datei mit Audacity zu konvertieren, war nicht erfolgreich, weshalb ich mich nach einem Tool zur Konvertierung von WAV-Dateien umgesehen habe.

Fündig wurde ich mit dem Tool

FFmpeg Builds

Dieses bietet zahlreiche mächtige Möglichkeiten zur Konvertierung von Audiodateien an und so ermöglicht sie auch die Konvertierung von WAV-Dateien in das richtige Format für eine Telefonanlage:

ffmpeg -i AnsageHoheQualitaet.wav -ac 1 -ar 8000 Ansage8Khz.wav

Windows 10 Neustart nach Update verhindern

Vor kurzem ist es mal wieder passiert. Ein Windows 10 Client, welcher rund um die Uhr wichtige Taskplanerereignisse abarbeitet, hat “ungefragt” Windows Updates installiert und sich anschließend neu gestartet.
Zu allem Überfluss hat er sich beim Neustart auch noch aufgehängt.

Einen Neustart in Windows 10 wirksam zu deaktivieren, sieht Microsoft in der Benutzeroberfläche von Windows gar nicht mehr vor. Es erzwingt einen gang in die Registry:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU

Hier legt ihr, wenn er noch nicht existiert einen REG_DWORD-Wert an mit dem Namen

NoAutoRebootWithLoggedOnUsers

Diesen füllt ihr mit dem Wert “1”.

Anschließend einen neustart durchführen und Windows 10 sollte nach installiertem Update nicht mehr selbstständig neu starten!

Registry-Eintrag zum deaktivieren des automatischen Neustarts.  Setzen des Wertes NoAutoRebootWithLoggedOnUsers auf 1 in Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU

Nicht druckbare Zeichen in Java Strings lassen .equal oder .valueOf(String) fehlschlagen

Beim Vergleichen von Strings mit equal oder Enum Parsen mit “valueOf” gibt es keinen match, obwohl der String augenscheinlich identisch ist – Dieses Problem wird in diesem Beitrag erläutert:

Beim Parsen von CSV Dateien stößt man ab und zu auf Probleme mit der Encodierung der zu parsenden Datei.

Im konkreten Fall gestaltete sich das Problem als herausfordernd, weil auf den ersten Blick keine Ursache für das Problem erkennbar war.

Die geparste Variable nennt sich “rowTypeString” und hat im Debugger den Inhalt “RH”

debug screenshot - String "RH" sieht aus als wäre er 2 Zeichen lang, ist aber 3 Zeichen lang wegen nicht druckbarer Zeichen - aus diesem Grund schlägt ein Equal fehl
Augenscheinlicher Inhalt der Variable “rowTypeString” – nur zwei Zeichen mit dem Inhalt “RH

Im Quelltext wird jedoch die Variable über ein Enum mit der  “valueOf()”-Funktion geparst und einem eindeutigen Typ zugewiesen. Diese lief jedoch immer auf eine IllegalArgumentException hinaus.
Die Analyse des String ergab dann doch noch interessante Details:

  • Der String hat eine Länge von 3 Zeichen (auch wenn das dritte unsichtbar ist)
  • Ein Character Array gab auch interessante Details zurück:
char of string with hidden character
  • Die Methode rowTypeString.getBytes() gibt  zahlreiche Bytes zurück, welche auf das dritte Zeichen hindeuten:
    [-17, -69, -65, 82, 72]
  • Eigentlich dürfte das ByteArray nur [82,72] lauten für den String “RH”

Die Lösung konnte sich dann doch gut sehen lassen. Es werden alle “nicht druckbaren Zeichen” entfernt mit dem nachfolgenden regulären Ausdruck:

stringValue.replaceAll("[^\\p{Graph}\n\r\t ]", "");

Ich danke an dieser Stelle dem Verfasser einer Antwort in StackOverFlow