MySQL Column count doesn't match value count at row 1

Lord_FB

Mitglied
Hallo zusammen,

ich schreiben im Moment ein kleines Progrämmchen zur Verwaltung von Photovoltaikanlagen. Während der jetzigen Phase läuft mein Datenbank noch per XAMPP auf /localhost.
Ich fummle jetzt seit 2 Stunden an folgendem Fehler rum, krieg ihn aber einfach nicht los:

Java:
java.sql.SQLException: Column count doesn't match value count at row 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1604)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1519)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1504)
	at speicherklassen.NeuesPVProjekt.berechnungsbasisFuellen(NeuesPVProjekt.java:174)
	at speicherklassen.NeuesPVProjekt.projektAnlegen(NeuesPVProjekt.java:93)
	at speicherklassen.NeuesPVProjekt.<init>(NeuesPVProjekt.java:62)
	at eingabe.NeuesPVProjektEingeben.PVProjektSpeichern(NeuesPVProjektEingeben.java:727)
	at eingabe.NeuesPVProjektEingeben.access$27(NeuesPVProjektEingeben.java:572)
	at eingabe.NeuesPVProjektEingeben$11.actionPerformed(NeuesPVProjektEingeben.java:543)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Ich weiß zwar, was Java mir mit dieser Fehlermeldung sagen will, finde aber den Fehler nicht...
Hier noch mein Code:

Java:
package speicherklassen;

import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import datenbankVerbinden.DatenbankVerbindung;

public class NeuesPVProjekt {

	///////////////////////////////////////////////////
	////Variablen
	///////////////////////////////////////////////////
	private String projektName;
	private java.sql.Date inbetriebnahme;
	private double anschaffungskosten;
	private double stromkostenEVU;
	private double einspeiseverguetung;
	private double eigenverbrauchsverguetung;
	private boolean eigenverbrauchsverguetungSpezial;
	private double eigenverbrauchsanteil;
	private double eigenverbrauchsverguetungUnterAnteil;
	private double eigenverbrauchsverguetungUeberAnteil;
	
	///////////////////////////////////////////////////
	////Konstruktoren
	///////////////////////////////////////////////////
	/**
	 * Konstruktor für ein neues Projekt
	 * @param projektName							--> Name des Projekts
	 * @param inbetriebnahme						--> Datum der Inbetriebnahme
	 * @param anschaffungskosten					--> Anschaffungskosten der PV-Anlage
	 * @param stromkostenEVU						--> Stromkosten des aktuellen Stromversorgers
	 * @param einspeisevergütung					--> Einspeiseverguetung
	 * @param eigenverbrauchsverguetung				--> Verguetung des Eigenbedarfs
	 * @param eigenverbrauchsvergütungSpezial		--> Abgeänderte Vergütung des Eigenbedarfs für bestimmte Prozentsätze
	 * @param eigenverbrauchsanteil					--> Benötigter Prozentsatz für geänderte Eigenbedarfsvergütung
	 * @param eigenverbrauchsvergütungUnterAnteil	--> Vergütung, wenn Anteil unter benötigtem Prozentsatz
	 * @param eigenverbrauchsvergütungUeberAnteil	--> Vergütung, wenn Anteil über benötigtem Prozentsatz
	 */
	public NeuesPVProjekt (String projektName, 
						   Date inbetriebnahme,
						   double anschaffungskosten,
						   double stromkostenEVU,
						   double einspeisevergütung,
						   double eigenverbrauchsverguetung,
						   boolean eigenverbrauchsvergütungSpezial,
						   double eigenverbrauchsanteil,
						   double eigenverbrauchsvergütungUnterAnteil,
						   double eigenverbrauchsvergütungUeberAnteil) {
		this.projektName = projektName;
		this.inbetriebnahme = inbetriebnahme;
		this.anschaffungskosten = anschaffungskosten;
		this.stromkostenEVU = stromkostenEVU;
		this.einspeiseverguetung = einspeisevergütung;
		this.eigenverbrauchsverguetung = eigenverbrauchsverguetung;
		this.eigenverbrauchsverguetungSpezial = eigenverbrauchsvergütungSpezial;
		this.eigenverbrauchsanteil = eigenverbrauchsanteil;
		this.eigenverbrauchsverguetungUnterAnteil = eigenverbrauchsvergütungUnterAnteil;
		this.eigenverbrauchsverguetungUeberAnteil = eigenverbrauchsvergütungUeberAnteil;
		if (projektAnlegen()) {
			System.out.println("Projekt erfolgreich angelegt!");
		}
	}
	
	///////////////////////////////////////////////////
	////Private Methoden
	///////////////////////////////////////////////////
	/**
	 * Anlegen einer neuen DB und herstellen der Verbindung mit der neuen DB
	 * @return --> "true" für erfolgreiches Anlegen / "false" für Fehler beim Anlegen
	 */
	@SuppressWarnings("finally")
	private boolean projektAnlegen() {
		boolean angelegt = false;
		PreparedStatement preStmt;
		try {
			//DB anlegen
			String update = "CREATE DATABASE pv_"+projektName;
			preStmt = DatenbankVerbindung.CON.prepareStatement(update);
			preStmt.executeUpdate();
			System.out.println("Datenbank angelegt!");
			
			//Neue DB verbinden
			@SuppressWarnings("unused")
			DatenbankVerbindung neueVerbindung = new DatenbankVerbindung ("pv_"+projektName);
			System.out.println("Datenbank gewechselt!");
			
			//Berechnungsbasis erzeugen
			boolean berechnungsbasisErzeugt = berechnungsbasisErzeugen();
			if(berechnungsbasisErzeugt) {
				boolean berechnungsbasisGefuellt = berechnungsbasisFuellen();
				if(berechnungsbasisGefuellt) {
					System.out.println("Berechnungsbasis erfolgreich angelegt und gefüllt!");
					angelegt = true;
				} else {
					System.out.println("Berechnungsbasis erfolgreich angelegt, aber Fehler beim Füllen!");
				}
			} else {
				System.out.println("Fehler beim Anlegen der Berechnungsbasis!");
			}
			
			//TODO Ablesungs-Tabelle erzeugen
			
		} catch (SQLException e) {
			// TODO Logeintrag
			// TODO Fehleranzeige
			e.printStackTrace();
		} finally {
			return angelegt;			
		}
	}
	
	/**
	 * Anlegen der Berchnungsbasis-Tabelle
	 * @return --> "true" für erfolgreiches Anlegen / "false für Fehler beim Anlegen
	 */
	@SuppressWarnings("finally")
	private boolean berechnungsbasisErzeugen() {
		boolean erzeugt = false;
		PreparedStatement stmt;
		try 
		{
			String update = "CREATE TABLE berechnungsbasis(" +
					"b_inbetriebnahme							DATE NOT NULL," +
					"b_anschaffungskosten						DOUBLE NOT NULL,"+
					"b_stromkostenEVU							DOUBLE NOT NULL," +
					"b_einspeiseverguetung 						DOUBLE NOT NULL," +
					"b_eigenverbrauchsverguetung				DOUBLE," +
					"b_eigenverbrauchsverguetungSpezial			BOOLEAN," +
					"b_eigenverbrauchsanteil					DOUBLE," +
					"b_eigenverbrauchsverguetungUnterAnteil	 	DOUBLE," +
					"b_eigenverbrauchsverguetungUeberAnteil		DOUBLE)";
			stmt = DatenbankVerbindung.CON.prepareStatement(update);
			stmt.executeUpdate();
			erzeugt = true;
			System.out.println("Berechnungsbasis erfolgreich angelegt!");
		} 
		catch (SQLException e) 
		{
			// TODO Logeintrag
			// TODO Fehleranzeige
			e.printStackTrace();
			System.out.println("Fehler beim Erzeugen der Berechnungsbasis");
		}
		finally
		{
			return erzeugt;			
		}
	}
	
	/**
	 * Füllen der Berechnungsbasis-Tabelle
	 * @return --> "true" für erfolgreiches Fuellen / "false" für Fehler beim Fuellen
	 */
	@SuppressWarnings("finally")
	private boolean berechnungsbasisFuellen() {
		boolean gefuellt = false;
		PreparedStatement stmt;
		try {
			String update = "INSERT INTO berechnungsbasis(" +
									"b_inbetriebnahme," +
									"b_anschaffungskosten," +
									"b_stromkostenEVU," +
									"b_einspeiseverguetung," +
									"b_eigenverbrauchsverguetung" +
									"b_eigenverbrauchsverguetungSpezial," +
									"b_eigenverbrauchsanteil," +
									"b_eigenverbrauchsverguetungUnterAnteil," +
									"b_eigenverbrauchsverguetungUeberAnteil) " +
							"VALUES ('"+inbetriebnahme+							"'," +
									"'"+anschaffungskosten+						"'," +
									"'"+stromkostenEVU+							"'," +
									"'"+einspeiseverguetung+					"'," +
									"'"+eigenverbrauchsverguetung+				"'," +
									"'"+eigenverbrauchsverguetungSpezial+		"'," +
									"'"+eigenverbrauchsanteil+					"'," +
									"'"+eigenverbrauchsverguetungUnterAnteil+	"'," +
									"'"+eigenverbrauchsverguetungUeberAnteil+	"')";		
			stmt = DatenbankVerbindung.CON.prepareStatement(update);
			stmt.getMetaData();
			//stmt.executeUpdate();
			gefuellt = true;
		} catch (SQLException e) {
			// TODO Logeintrag
			// TODO Fehleranzeige
			gefuellt = false;
			e.printStackTrace();
		} finally {
			return gefuellt;			
		}		
	}
}

Die Parameter für den Konstruktor kommen aus einer Eingabemaske und sind auf keine Fall null...
Wär echt super, wenn mir jemand weiterhelfen könnte...bin gerade leicht am verzweifeln...:autsch:
 
M

Marcinek

Gast
Ich sehe keinen Fehler.

Entweder ist das kompilat nicht aktuell oder innerhalb der Parameter befindet sich ein ein Komma oder so, so dass es die Abfrage verändert.

Lass dich mal das SQL ausgeben.
 

Lord_FB

Mitglied
:autsch:

Innerhalb der Parameter werden wenn dann nur Punkte (als Trennzeichen bei den "double"-Werten) verwendet und an den Punkten kanns ja eigentlich nicht liegen, oder etwa schon?

Da muss ich jetzt mal blöd nachhaken, aber wie kann ich mir das
SQL:
SQL
ausgeben lassen?
 

Lord_FB

Mitglied
Ja, klar, sorry wegen der etwas verwirrten Frage :oops:

Der "update"-String ist meiner Meinung nach einwandfrei:
SQL:
INSERT INTO berechnungsbasis(b_inbetriebnahme,b_anschaffungskosten,b_stromkostenEVU,b_einspeiseverguetung,b_eigenverbrauchsverguetungb_eigenverbrauchsverguetungSpezial,b_eigenverbrauchsanteil,b_eigenverbrauchsverguetungUnterAnteil,b_eigenverbrauchsverguetungUeberAnteil) VALUES ('2012-12-01','1234567.89','0.1234','0.1234','0.1234','false','0.0','0.0','0.0')

Oder gibts da dran was zu meckern????:L
 

bronks

Top Contributor
:eek: Ver****t...ja, klar, danke!!!! ;)
Dieses Komma hat mich jetzt ganze 3,5h Zeit gekostet...
Nein! Es war nicht das Komma, sondern die lieblose und wenig aussagende Fehlermeldung.

Hättest Du Dir mit u.g. auch so schwer getan?
Code:
There are fewer columns in the INSERT statement than values specified in the VALUES clause.
The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
 
M

Marcinek

Gast
Hö??

Oder man schreibt, dass die Spalten nicht übereinstimmen. Kommt immer auf das gleiche heraus.

-.-:autsch:
 

Lord_FB

Mitglied
Naja, mir war schon klar, dass ich irgendwo in der INSERT-Anweisung einen Fehler hatte, der was damit zu tun hatte, dass Spalten und Werte auf irgendeine Weise nicht übereinstimmen, aber dieses Komma ist meiner Fehleranalyse irgendwie entgangen...;(
Aber die Fehlermeldung, grad bei SQLExceptions sind manchmal wirklich etwas sehr wenig aufschlussreich...aber nochmal danke für den Tipp mit der Ausgabe der SQL-Anweisung, das könnte manchmal wirklich noch hilfreich sein! :toll::applaus:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F column count doesn't match value count at row 1 Datenbankprogrammierung 6
D JOIN COLUMN wird nicht genommen Datenbankprogrammierung 2
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
L Oracle Repräsentative Namen für die Column Types Datenbankprogrammierung 9
Thallius Ist JSON als column jetzt der neue Standard oder hab ich was verpasst? Datenbankprogrammierung 34
Kirby.exe SQL-Exception: Column not found Datenbankprogrammierung 6
M Oracle String aus Column splitten und x Rows daraus erstellen Datenbankprogrammierung 1
S Bestimmten Column finden Datenbankprogrammierung 3
zhermann Data truncation: Incorrect date value: 'null' for column Datenbankprogrammierung 31
OnDemand Column char type, wie befüllen? Datenbankprogrammierung 2
K Derby/JavaDB '<columnName>' is not a column in table or VTI '<value>'. Datenbankprogrammierung 12
K Unkown Column in where clausel Datenbankprogrammierung 2
Z Unknown column 'xxx' in 'field list' Datenbankprogrammierung 2
D Count(*) auf 2 Tabellen anwenden Datenbankprogrammierung 7
S NamedQuery mit count Datenbankprogrammierung 2
J SQL Problem mit Count + Group By Datenbankprogrammierung 7
A Count(*)-Befehl Datenbankprogrammierung 3
O COUNT() und MAX() in einer Abfrage Datenbankprogrammierung 5
N [Microsoft][ODBC Microsoft Access Driver]COUNT field incorre Datenbankprogrammierung 13

Ähnliche Java Themen

Neue Themen


Oben