MySQL Daten in die Datenbank eingeben via Java Programm

Eddie

Mitglied
Hallo zusammen,

ich habe die Aufgabe, ein Java Programm zu schreiben, das mit einer MySQL-Datenbank interagieren soll. Einen Client halt.
Eigentlich komm ich glaub ganz gut damit zurecht, nur häng ich gerade an einer Stelle und ich hoffe, ihr könnt mir weiterhelfen.Also folgendes:
Ich habe eine Methode geschrieben, die eine neue Addresse anlegen soll:
Java:
public void createAddress (String street, String houseNumber, String city, String postcode, String state, 
							   String country, String phoneNumber, String mobileNumber, String faxNumber, String eMail){
		
		DbConnection conn1 = new DbConnection();
		conn = conn1.buildConnection();
		
		try {
			statement = conn.createStatement();
			String prep = "INSERT INTO address " +
					"(street,house_number,city,postcode,state,country,phone_number,mobile_number,fax_number,email_address)"+
					"VALUES ('"+street+"','"+houseNumber+"','"+city+"','"+postcode+"','"+state+"','"+
					country+"','"+phoneNumber+"','"+mobileNumber+","+faxNumber+"','"+eMail+"')";
			statement.executeUpdate(prep);
			conn.close();	
		}
		
		catch (SQLException ex) {
			System.out.println("SQLException: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("VendorError: " + ex.getErrorCode());	
		}
	}
Wenn ich die Methode nun teste, bekomm ich immer den Fehler
SQLException: Column count doesn't match value count at row 1
SQLState: 21S01
VendorError: 1136

Wenn ich allerdings das SQL-Statement direkt in die SQL-Workbench eingebe, funktioniert es.
Könnte mir einer sagen, wo das Problem liegt? Was übersehe ich?

Vielen Dank schon mal.
Gruß
Eddie

PS: zu der Tabelle "address" gehört noch eine Spalte "address_ID". Die ist allerdings Auto-Increment und müsste daher ja eigenltich automatisch mit dem richtigen Wert befüllt werden. Ich hoffe und denke, dass das auch über das Java-Programm funktioniert...
 
Wenn man SQL manuell zusammenfrickelt/pfuscht macht man schnell manl einen fehler, abgesehen vom Sicherheitsproblem (SQL Injection).

Dir fehlt ein [c]'[/c] bei faxnumber 😉

Ansonsten wäre es besser PreparedStatements zu verwenden.
 
Du hast zwischen mobileNumber und faxNumber die ' vergessen.
Verbesserungsvorschläge:
- Schreibe eine Klasse Address, dann musst du nicht 10 Parameter sondern nur einen übergeben
- Verwende PreparedStatements (schützt auch vor SQL-Injections)
- Verwende ein ORM-Framework wie z.B. JPA
 
Oh man...da sitz ich fast zwei Stunden davor und such den Fehler...wie peinlich 😳
DANKE!
Dass Prepared Statements vor SQL-Injection schützen, wusst ich nicht. Ich glaub, das änder ich nachher gleich mal...muss ich ja die anderen Methoden auch ändern 🙂
Von ORM-Frameworks hab ich ehrlich gesagt noch nie was gehört.
Aber das mit der extra Klasse für address ist an sich ne gute Idee. Muss ich mal genauer drüber nachdenken, wie sich sowas machen ließe.
 

Neue Themen


Zurück
Oben