Variablen Integer in Stmt

  • Themenstarter Themenstarter TryToProg
  • Beginndatum Beginndatum
T

TryToProg

Gast
Servus Leute,
programmiere momentan für die Schule eine Datenbank zur Kundenverwaltung.

Java:
	myStmt.executeUpdate ("INSERT INTO Kundendaten "
							+ "VALUES ( ' " + nachname.getText() + " ' , ' "
							+ ort.getText() + " ' , ' " + straße.getText()
							+ " ' , ' " + telefonnummer.getText()
							+ " ' , ' " + XXXXXX + "');

An stelle der XXXXX würde ich nun gerne eine Integer Variable einfügen, um eine fortlaufende Kundennummer möglich zu machen. Dies ist so vorgegeben.
Für einen kleinen Denkanstoß wäre ich sehr sehr dankbar...!!!

Viele Grüße
 
Zuletzt bearbeitet von einem Moderator:
Du kannst die Variable doch einfach anhängen:

Java:
int zahl = 91;
myStmt.executeUpdate ("INSERT INTO Kundendaten "
                            + "VALUES ( ' " + nachname.getText() + " ' , ' "
                            + ort.getText() + " ' , ' " + straße.getText()
                            + " ' , ' " + telefonnummer.getText()
                            + " ' , ' " + zahl + "');
 
String literal is not properly closed by a double-quote

diesen fehler bekomme ich wenn ich es so mache...
 
und fällt dir bei [c]"');[/c] am Ende nichts selber auf?

weitere Details sind ebenso offensichtlich: eine Zahl an die DB besser nicht in Anführungszeichen übergeben,
bei den meisten Anführungszeichen hast du noch Leerzeichen dazu, ist das klug?
nur am Ende arbeitest du ohne Leerzeichen, bei einer Zahl aber wie gesagt besser ganz weg

fange immer mit reinem SQL an, ein kompletter String:
[c]INSERT INTO Kundendaten VALUES ('TestNachname', ..."[/c]
dann parallel mit Variablen nachbauen und den erstellten String ausgeben und vergleichen,
nicht gleich an DB senden und den Inhalt nur vage zu ahnen
 
Ja weil hinten ein " fehlt was die Fehlermeldung ja auch sagt...

"closed by a double-quote"

Java:
myStmt.executeUpdate ("INSERT INTO Kundendaten "
                            + "VALUES ( '" + nachname.getText() + "', '"
                            + ort.getText() + "', '" + straße.getText()
                            + "', '" + telefonnummer.getText()
                            + "', '" + zahl + "'");
 
Zuletzt bearbeitet:
Schau dir mal PreparedStatements an.... Wenn du das SQL selber so zusammen baust musst du sicher stellen dass du alles richtig quotest.
 
Ah ja. Habe hinten das Zeichen übersehen, so funktioniert es.

myStmt.executeUpdate("INSERT INTO pizzaservice "
+ "VALUES ( ' " + nachname.getText() + " ' , ' "
+ ort.getText() + " ' , ' " + straße.getText()
+ " ' , ' " + telefonnummer.getText()
+ " ' , ' " + KundennummerTemp + "'");

Nur das jetzt garnichts mehr geht. Hier mal der Code:




Connection myCon;
Statement myStmt;


try {

Class.forName("com.mysql.jdbc.Driver").newInstance();

myCon = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/pizzaservice", "root",
"");

myStmt = myCon.createStatement();


myStmt.executeUpdate("INSERT INTO pizzaservice "
+ "VALUES ( ' " + nachname.getText() + " ' , ' "
+ ort.getText() + " ' , ' " + straße.getText()
+ " ' , ' " + telefonnummer.getText()
+ " ' , ' " + KundennummerTemp + "'");

ResultSet result = myStmt
.executeQuery("SELECT * FROM pizzaservice");
result.next();
KundennummerTemp = result.getInt( "Kundennummer:" ); // hier wird die Kundennummer ausgelesen
KundennummerTemp = KundennummerTemp + 1;


while (result.next()) {

System.out.println(result.getString("Nachname:"));

}
myCon.close();

} catch (Exception sqlEx) {
System.err.println(sqlEx);
System.out.println("SQL Fehler");

}



Hier muss ein Syntax Fehler vorliegen. Kann jedoch keinen fehler feststellen.
Fehlermeldung: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
SQL Fehler
 
[Java]Connection myCon;
Statement myStmt;


try {

Class.forName("com.mysql.jdbc.Driver").newInstance();

myCon = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/pizzaservice", "root",
"");

myStmt = myCon.createStatement();


myStmt.executeUpdate("INSERT INTO pizzaservice "
+ "VALUES ( ' " + nachname.getText() + " ' , ' "
+ ort.getText() + " ' , ' " + straße.getText()
+ " ' , ' " + telefonnummer.getText()
+ " ' , ' " + KundennummerTemp + "'");

ResultSet result = myStmt
.executeQuery("SELECT * FROM pizzaservice");
result.next();
KundennummerTemp = result.getInt( "Kundennummer:" ); // hier wird die Kundennummer ausgelesen
KundennummerTemp = KundennummerTemp + 1;


while (result.next()) {

System.out.println(result.getString("Nachname:"));

}
myCon.close();

} catch (Exception sqlEx) {
System.err.println(sqlEx);
System.out.println("SQL Fehler");

} [/code]
 
Eine Zahl in einem SQL Statement setzt man auch nicht in Hochkommas.

Wie bereits vorgeschlagen könnte man mit derVerwendung von PreparedStatements solche Fehler vermeiden.
 
Hab die Anweisung mal "umgebaut" und ich hoffe dir fällt selber etwas auf...

Java:
INSERT INTO pizzaservice VALUES ( 'nachname.getText()', 'ort.getText()', 'straße.getText()', 'telefonnummer.getText()', 'KundennummerTemp'

und hier sogar nochmal mit eingesetzten Werten:

Java:
INSERT INTO pizzaservice VALUES ( 'Mustermann', 'Musterhausen', 'Musterstraße', '3124324', '2'

DAS ist DEINE Anweisung, finde den Fehler...

@fassy: Cool das war mir bis jetzt auch unbekannt 🙂 sehr hilfreich 😉
Danke
 
Zuletzt bearbeitet:
Kleine Hilfe:
Java:
            myStmt = myCon.prepareStatement("INSERT INTO pizzaservice VALUES (?,?,?,?,?)");
            
            myStmt.setString(1, nachname.getText());
            myStmt.setString(2, ort.getText());
            myStmt.setString(3, straße.getText());
            myStmt.setString(4, telefonnummer.getText());
            myStmt.setInt(5, KundennummerTemp);

            myStmt.executeUpdate();

Nebenbei denke ich mal deine String aus z.B: nachname.getText() kommen direkt aus einem Textfeld. Ohne PreparedStatements oder zumindest ein escapen der Strings ist deine Anwendung extrem SQL Injection gefährdet.
 
[OT]
Kleine Hilfe:
Nebenbei denke ich mal deine String aus z.B: nachname.getText() kommen direkt aus einem Textfeld. Ohne PreparedStatements oder zumindest ein escapen der Strings ist deine Anwendung extrem SQL Injection gefährdet.

Hoffen wir mal, dass der TO das Problem auch so sieht und eine einfache Abwehr gegen SQL Injection einbaut. Ich verstehe einfach nicht wie immer wieder auch etwas größere Websites von solch simplen Agriffen lahm gelegt werden.
[/OT]
 

Neue Themen


Zurück
Oben