Pervasive PSQL insert funktion geht nicht

Emrullah

Mitglied
Hallo zusammen

danke zahlreichen Hilfen bin ich sehr weit mit meinem Programm gekommen, vielen dank erstmal.


Mein Problem diesmal liegt daran das ich eine Insert Funktion wollte in pervasive psql.

Bei Funktion Abziele funktioniert die Insert Funktion aber in der Neue Mitarbeiter Anlegen funktioniert es nicht.

Java:
 btn_newUser = new JButton("Mitarbeiter anlegen");
        btn_newUser.setBounds(370, 100, 150, 20);
        btn_newUser.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {

                System.out.println("Mitarbeiter anlegen");

                String[] allInputs = {
                    txf_Vorname.getText(),
                    txf_Nachname.getText(),
                    txf_Adresse.getText(),
                    txf_Nr.getText(),
                    txf_Ort.getText(),
                    txf_PLZ.getText(),
                    "" + cob_level.getSelectedIndex() * 2,
                    txf_Telefon.getText(),
                    txf_Email.getText(),};

                MySQLConnection1 mySQL = new MySQLConnection1();
                if (mySQL.createUser(allInputs)) {
                    System.out.println("User wurde angelegt!");
                    setVisible(false);
                    
                JOptionPane.showMessageDialog(null, "User wurde angelegt!");
                } else {
                    System.out.println(".actionPerformed(fehler)");
                    
                    System.out.println("User wurde nicht angelegt!");
                    JOptionPane.showMessageDialog(null, "User wurde nicht angelegt!");
                }

            }
        });
        this.add(btn_newUser);

    }

[CODE lang="java" title="Insert Funktion"] public boolean createUser(String[] userData) {
for (int i = 0; i < userData.length; i++) {
if (userData.contentEquals("")) {
System.out.println("systeme.MySQLConnection1.createUser(i)"+i);

System.out.println("User wurde nicht angelegt!");
return false;
}
}
Erstelle_verbindung();
try {
PreparedStatement stmt = con.prepareStatement("INSERT INTO Mitarbeiter(Name, Nachname, Adresse, Hausnummer, Ort, PLZ, Level, Telefon, Email) VALUES "
+ "('" + userData[0] //Name
+ "','" + userData[1] //Nachname
+ "','" + userData[2] //Adresse
+ "','" + Integer.parseInt(userData[3]) //Hausnummer
+ "','" + userData[4] //Ort
+ "','" + Integer.parseInt(userData[5]) //PLZ
+ "','" + Integer.parseInt(userData[6]) //LEvel
+ "','" + Integer.parseInt(userData[7]) //Telefonnummer
+ "','" + userData[8] + "')");
stmt.execute(); //Email

PreparedStatement stmt2 = con.prepareStatement("SELECT id FROM Mitarbeiter WHERE Name = '" + userData[0] + "' AND Nachname = '" + userData[1] + "'");
ResultSet rs = stmt2.executeQuery();
while (rs.next()) {

Integer tempId = rs.getInt(1);
String output = "";
int maxChars = 4;
if (userData[0].length() > maxChars) {
output = userData[0].substring(0, maxChars);
} else {
output = userData[0];
}

String tempLoginName = output + tempId;
System.out.println("login Name : " + tempLoginName);

String query = "update Mitarbeiter set login_name = ?,login_password = ? where id = ?";
PreparedStatement preparedStmt = con.prepareStatement(query);
preparedStmt.setString(1, tempLoginName);
preparedStmt.setString(2, sha256("123456"));
preparedStmt.setInt(3, tempId);
preparedStmt.executeUpdate();

return true;
}
} catch (Exception ex) {
System.out.println("Verbindung konnte nicht hergestellt werden!");

ex.printStackTrace();
return false;
}[/CODE]



hier extra die Insert Funktion von Aboziel die funktioniert

[CODE lang="java" title="Aboziel"] public void speichern(String[] Aboziel) {

Connection con;
con = mySQL.Aboziel_Erstelle_verbindung();

try {

PreparedStatement stmt = con.prepareStatement("INSERT INTO Aboziele(FirmenID, HeftID, Ausgabe, Jahr, Aboziel, Heftname) "
+ "VALUES"
+ "('" + Integer.parseInt(Aboziel[0]) //FIrmenID
+ "','" + Integer.parseInt(Aboziel[2]) //HeftID
+ "','" + Integer.parseInt(Aboziel[3]) //Ausgabenummer
+ "','" + Integer.parseInt(Aboziel[4]) //Jahr
+ "','" + Integer.parseInt(Aboziel[5]) //Aboziel
+ "','" + Aboziel[1] + "')" //Heftname
+ "Select * Frome abos where FirmenID ='" + Integer.parseInt(Aboziel[0])
+ "And Heftname='" + Aboziel[1]
+ "And Ausgabe='" + Integer.parseInt(Aboziel[3])
+ "AND Jahr ='" + Integer.parseInt(Aboziel[4])
+ "ON Duplicate KEY UPDATE "
+ "ABOZiel=" + Integer.parseInt(Aboziel[5]));
stmt.executeUpdate();

mySQL.schliesse_verbindung();

} catch (Exception e) {
System.out.println("firmen : Konnte keine Verbindung hergestellt werden");
e.printStackTrace();

}

}[/CODE]



kleine Bemerkung, auf der MySQL datenbankhat es ohne Probleme Funktioniert.
 

mihe7

Top Contributor
@Emrullah, baue nie selbst Daten, die vom Benutzer oder aus Instanzvariablen oder Parametern kommen, in einen SQL-String ein. Die Daten werden dann ungeprüft in das SQL übernommen, was ein großes Sicherheitsproblem darstellt. Stattdessen verwende die Setter von PreparedStatement. Dann sorgt der Treiber dafür, dass hier nichts böses passieren kann. Außerdem ist es sehr viel angenehmer, ein paar Setter zu lesen als ekelhaft zusammengebaute Strings.
 

Emrullah

Mitglied
@mihe7 kannst du mir einen kleinen Beispiel zeigen damit ich ungefähr verstehen kann wie du es meinst oder wie ich es einbaue,

und die perparesatmentsetter meinst du nur bei insert Funktionen oder in welcher form sollten sie den am besten benutzt werden
 

mihe7

Top Contributor
Ein Beispiel findest Du in dem Link von @LimDul.

Konkret hast Du einen fixen SQL-String, bei dem Platzhalter verwendet werden:

Java:
// hier mal als Klassenvariable
static final String INSERT = "INSERT INTO Aboziele(FirmenID, HeftID, Ausgabe, Jahr, Aboziel, Heftname) " +
        "VALUES (?,?,?,?,?,?)";

Damit erzeugst Du - wie bislang - Dein PreparedStatement und setzt dann einfach die Werte (die einzelnen Platzhalter im String werden ab 1 durchnummeriert):
Java:
try(PreparedStatement stmt = con.prepareStatement(INSERT)) {
    stmt.setInt(1, Integer.parseInt(Aboziel[0])); // setzt den ersten Parameter des SQL-Strings auf ein int
    stmt.setInt(2, Integer.parseInt(Aboziel[2])); // zweiten Parameter
    // usw.
    stmt.setString(6, Aboziel[1]); // den sechsten Parameter auf einen String setzen

    stmt.executeUpdate();
}
Das PreparedStatement wird dank des try-with-resources automatisch geschlossen. Die DB-Verbindung nicht im try-Block schließen.

Nebenbei, weil ich es gerade gesehen habe:
Java:
Integer.parseInt(Aboziel[0]) //FIrmenID
Statt eines Kommentars könntest Du gleich eine Konstante einführen und verwenden:
Java:
private static final int FIRMEN_ID = 0;

// und dann
Integer.parseInt(Aboziel[FIRMEN_ID]);
Jetzt ist die Info FirmenID kein toter Text mehr sondern Code. Du läufst also z. B. nicht Gefahr, dass Index und Kommentar irgendwann mal durch eine Änderung sich nicht mehr entsprechen.

Wenn man das noch einen Schritt weiterführt, kannst Du für Aboziel auch eine eigene Klasse verwenden, die z. B. eine Methode getFirmenId() anbietet, die ein int zurückgibt.

Das aber nur nebenbei.
 

mihe7

Top Contributor
Der "Vorschlag" hatte nichts mit Deinem Problem zu tun, sondern war ganz allgemeiner Natur. Dein SQL-String würde natürlich auch etwas anders aussehen.

Problemsuche:
  1. Wird eine Exception ausgegeben?
  2. Hast Du evtl. irgendwo das Autocommit abgeschaltet? Dann müsstest Du im Anschluss natürlich selbst den Commit ausführen.
  3. Funktioniert das SQL, wenn Du es mit geeigneten Werten in den MySQL-Client (MySQL Workspace, MySQL Admin, ...) schreibst?
  4. Du kannst Dir auch mal den Rückgabewert von executeUpdate ausgeben lassen, da sollte ein Wert ungleich 0 rauskommen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
E Insert() Java Basics - Anfänger-Themen 12
C Erste Schritte Insert Into klappt nicht Java Basics - Anfänger-Themen 6
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
F Methoden Insert Sort Fehler Java Basics - Anfänger-Themen 10
M AutoID auslesen nach INSERT Java Basics - Anfänger-Themen 8
I Problem mit H2-DB Insert-Statement Java Basics - Anfänger-Themen 3
K Problem mit h2 DB Insert Befehl Java Basics - Anfänger-Themen 6
C SELECT klappt INSERT klappt nicht!!!??? Java Basics - Anfänger-Themen 3
M Nodes/LinkedList und insert funzt net Java Basics - Anfänger-Themen 9
V Problem mit Insert-Methode des Binärbaums Java Basics - Anfänger-Themen 4
M Insert into klappt nicht? Java Basics - Anfänger-Themen 7
V Insert into klappt nicht so ganz Java Basics - Anfänger-Themen 6
W sql "Insert into" funktioniert nicht Java Basics - Anfänger-Themen 5
I JTextArea insert Methode Java Basics - Anfänger-Themen 5
L INSERT Statement geht nicht HILFE! Java Basics - Anfänger-Themen 2
L hsqldb INSERT - Unexpected token Java Basics - Anfänger-Themen 2
T Insert befehl geht nicht Java Basics - Anfänger-Themen 15
G String.insert an unbekannter Stelle Java Basics - Anfänger-Themen 5
S Listen - insert - print etc. Dringend! Bitte! Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben