Derby/JavaDB '<columnName>' is not a column in table or VTI '<value>'.

Kros

Mitglied
Hallo

Versuche über
Code:
 statement.executeUpdate(qryDML);
einen Datensatz in die embedded Derby Datenbank zu schreiben. Dabei erhalte ich exception:
Code:
'<columnName>' is not a column in table or VTI '<value>'.

Da ich mir sehr sicher bin, dass der Spaltenname stimmt, wollte ich euch fragen ob es für diese Fehlermeldung auch noch andere Gründen geben kann, ausser, dass die Spalte in der Datenbank nicht gefunden wurde. Und was bedeutet das VTI?

Grüsse Kros
 
Zuletzt bearbeitet:

Kros

Mitglied
:toll:

Das war doch nur die allgemeine Meldung aus der Doku. Die effektive Fehlermeldung lautet:

Code:
'VORNAME' is not a column in table or VTI 'APP.TBLPERSON'.

und der SQL String lautet:
Code:
INSERT INTO APP.TBLPERSON (Vorname) VALUES ('halloMeinNameIst')

und ja ich bin sicher das ich in der Tabelle TBLPERSON eine Spalte mit dem Namen VORNAME habe.
 

Deros

Bekanntes Mitglied
Mit einer Meldung aus der Doku ist dir aber wenig zu helfen. Funktioniert denn ein insert auf einer andere Spalte? Sprich ein generelles Problem oder nur mit dieser Spalte? Funktioniert ein select?

Funktioniert das Statement ausserhalb der Anwendung?

Hinter VTI verstecken sich die Table Function.
 

Kros

Mitglied
In meiner Datenbank habe ich aktuell 3 Tabellen mit unterschiedlich vielen Spalten.

Ich lasse mir die Datenbanktabellen in einem JFrame anzeigen. Welche Tabelle angezeigt werden soll, wähle ich mit einem JComboBox aus, welches über die jeweilige SELECT Anweisung das ResultSet hohlt und mittels DefaultTableModel weiterverarbeitet. Das ganze funktioniert tip top.

Das INSERT funktioniert jedoch nicht. In der Zwischenzeit habe ich versucht andere Spalten mittels Update anzusprechen. Das hat nur bei einer Spalte funktioniert.

Tabelle TBLPRODUKT
"INSERT INTO APP.TBLPRODUKT (TFIRMA) VALUES ('halloMeinNameIst')"; -> Funktioniert, die Daten werden in die DB übernommen.

Tabelle TBLPERSON
"INSERT INTO APP.TBLPERSON (Name) VALUES ('halloMeinNameIst')"; -> Funktioniert nicht
"INSERT INTO APP.TBLPERSON (Vorname) VALUES ('halloMeinNameIst')";-> Funktioniert nicht
"INSERT INTO APP.TBLPERSON (Geschlecht) VALUES ('halloMeinNameIst')";-> Funktioniert nicht
"INSERT INTO APP.TBLPERSON (Geburtsdatum) VALUES ('halloMeinNameIst')";-> Funktioniert nicht

Tabelle TBLPRODUKT
"INSERT INTO APP.TBLPRODUKT (Produktname) VALUES ('halloMeinNameIst')";-> Funktioniert nicht
"INSERT INTO APP.TBLPRODUKT (IDFIRMA) VALUES ('halloMeinNameIst')";-> Funktioniert nicht

Ein Insert über den Data Source Explorer in Eclipse funktioniert für alle Spalten.

Habt ihr eine Idee wie ich das Problem eingrenzen könnte?
 

Deros

Bekanntes Mitglied
das insert mittels Data Source Explorer hast du aber mit dem gleichen User gemacht? Sonst könnte ich mir noch vorstellen, dass das Recht für insert fehlt.

Ansonsten vielleicht mit execute() probieren anstelle von executeUpdate()
 

Kros

Mitglied
Jup mit dem gleichen User. Mit execute() erhalte ich das selbe Ergebnis (Ergebnis im Sinn von geht nicht ;( )

Kann es daran liegen dass ich meine DB-Connection die ganze Zeit geöffnet lasse? Das ganze läuft akteull so ab:

Treiber laden
Code:
Class.forName(treiber);
Verbindung aufbauen
Code:
conn = DriverManager.getConnection("jdbc:derby:" + dbName, user, passwd);
Erste Abfrage durchführen (Auflistung aller Tabellen in einem ResultSet und dann weiter in ein ComboBox)
Zweite Abfrage durchführen (Die ausgewählte Tabelle in einem JTable anzeigen)
Dritte Abfrage (Daten zur Tabelle hinzufügen)

Das alles über die selbe Verbindung ohne diese zu Beenden. Könnte es daran liegen?
 

Kros

Mitglied
Habe nun eine neue Datenbank erstellt und darin wieder eine neue Tabelle angelegt. Das Problem ist das selbe. Nun habe ich noch den Code soweit heruntergekürzt, dass nur noch das nötigste für die SQL Anweisung steht, dennoch erhalte ich die selbe Fehlermeldung:

Java:
			String sql = "INSERT INTO TBLFIRMA (FirmenName) VALUES ('GUGGUS')";
			
				
				String dbHost = "";
				String treiber = "org.apache.derby.jdbc.EmbeddedDriver";
				String dbPort = "";
				String dbName = "sani;create=true";
				String user = "";
				String passwd = "";
				
				try {
					System.out.println("TreiberLaden");
					Class.forName(treiber);
				} catch (ClassNotFoundException cnfe) {
					System.out.println("Treiber kann nicht geladen werden: "
							+ cnfe.getMessage());
				}
				
				try {
					System.out.println("Verbindung aufbauen");
					Connection con;
					con = DriverManager.getConnection("jdbc:derby:" + dbName,
							user, passwd);
					
					con.createStatement().execute(sql);
					
				} catch (SQLException sqle) {
					System.out.println("Verbindung ist fehlgeschlagen: "
							+ sqle.getMessage());
				}

Meldungen in der Konsole
Java:
TreiberLaden
Verbindung aufbauen
Verbindung ist fehlgeschlagen: 'FIRMENNAME' is not a column in table or VTI 'APP.TBLFIRMA'.
INSERT INTO TBLFIRMA (FirmenName) VALUES ('GUGGUS')

Ich gebs auf
 

Kros

Mitglied
Hallo nochmal, habe das Problem noch etwas eingegrenzt.

Situation 1: Wie ich es bis jetzt gemacht habe:
  • Im Data Source Explorer eine Tabelle angelegt
  • Eine Insert Anweisung über den Programmcode abgesendet

Situation 2: Wie ich es jetzt versucht habe
  • Über den Programcode eine Tabelle angelegt
  • Eine Insert Anweisung über den Programmcode abgesendet

Situation 2 funktioniert wunderprächtig. Verstehen kann ich es allerdings nicht wirklich. Hat da jemand eine Idee?

Grüsse
 

Deros

Bekanntes Mitglied
ich denke es hat bei einer Spalte funktioniert? Kannst mal das create=true weglassen, das sollte eigentlich die db nur erzeugen, wenn sie nicht existiert. Kommt dann ein Fehler?
Greifst sonst mit dem DS Explorer auf ne falsche db zu? Wenn du jetzt einmal die Tabelle über das Prog angelegt hast bleibt sie erhalten?
 

Kros

Mitglied
Ja stimmt, bei der einten Tabelle (mit nur einer Spalte) hat es auch schon vorher funktioniert.

Ob mit create=true oder ohne, hab ich versucht, ändert aber nichts.

Nun habe ich versucht mittels Javacode, in beide Datenbanken je eine neue Tabelle einzufügen und gleichzeitig einen Datensatz zu speichern. Beide neuen Tabellen sind im DS Explorer ersichtlich. Auch der neue Datensatz ist in der jeweiligen Tabelle gespeichert.

Ich werde meine Tabellen mal Grundsätzlich mittels Javacode erstellen. Dennoch interessiert es mich wo mein Fehler liegt. Ich gehe davon aus, dass irgendwelche Einstellung im DS Explorer dazu führen.

Gruss und Danke
 

Kros

Mitglied
OK nun bin ich wohl voll und ganz plemplem :eek:

Habe mein GUI so erweitert, dass ich nun in einem JTextArea den SQL String direkt eingeben kann und über einen Button diesen an die Datenbank sende. So wollte ich die einzelnen Tabellen halt direkt erstellen und die Insert Anweisungen direkt testen können.

Nun habe ich so wieder zwei Tabellen erstellt und die Insert Anweisung funktioniert nun bei der einten Tabelle und bei der anderen nicht.

Kann es sein das mein Datenbank Treiber defekt ist?

edit: Neuer Treiber heruntergeladen -> Problem nicht weg
 
Zuletzt bearbeitet:

Kros

Mitglied
So... Nun funktioniert es.

Tabellen- und Spaltennamen mit Kleinbuchstaben oder gemischt mit Klein- und Grossbuchstaben gemischt geschrieben funktioniert nicht.

Tabellen- und Spaltennamen mit ausschliesslich Grossbuchstaben geschrieben Funktioniert

Ob beides (Tabllen- und Spaltennamen) Gross geschrieben werden muss weiss ich nicht, funktioniert aber.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
L MySQL Column count doesn't match value count at row 1 Datenbankprogrammierung 9
K Unkown Column in where clausel Datenbankprogrammierung 2
F column count doesn't match value count at row 1 Datenbankprogrammierung 6
Z Unknown column 'xxx' in 'field list' Datenbankprogrammierung 2
Z Aus zwei bestehenden Table eine zusätzliche Gemeinsame machen (JavaFX) Datenbankprogrammierung 21
O HOW TO INSERT PRIMARY INTO ANOTHER TABLE AND USE IT AS FOREIGN KEY TO DISPLAY DATA IN A RELATIONSHIP Datenbankprogrammierung 3
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
D SQL-Statement Beziehungsfehler bei CREATE TABLE Datenbankprogrammierung 2
S Table per Class Datenbankprogrammierung 2
F Create Table - Habe ich eine schwache Entität erzeugt ? Datenbankprogrammierung 4
C Oracle DROP TABLE IF EXISTS Datenbankprogrammierung 4
L SQL Fehler (Table/View does not exist) Datenbankprogrammierung 17
I Access Datenbank in Table einlesen lassen Datenbankprogrammierung 2
M Derby/JavaDB Kleine DB mit Tabelle erweitern - Integrität - Alter-Table - Netbeans ... Datenbankprogrammierung 5
OnDemand Update table SET will nicht Datenbankprogrammierung 9
ruutaiokwu sql server t-sql: try/catch bei ALTER TABLE ? Datenbankprogrammierung 4
J Java DB Neuen Eintrag am Anfang der Table Datenbankprogrammierung 6
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
P sql statement alter table foreign key Datenbankprogrammierung 4
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
R Select Statement als temporärer Table Datenbankprogrammierung 7
H MySQL Tabelle "Table" programmieren Datenbankprogrammierung 2
M MySQL Table in Jtable integrieren Datenbankprogrammierung 26
F H2:Wie kann man insert eine Reihe "int" wert als blob in table? Datenbankprogrammierung 12
M Insert in Table mit 250 Feldern Datenbankprogrammierung 2
M Bei HSQLDB etwas wie OPTIMIZE TABLE? Datenbankprogrammierung 2
X von myISAM auf MEMORY! ERROR 1114: Table full Datenbankprogrammierung 13
S Create Table mit PreparedStatement Datenbankprogrammierung 2
M Vor CREATE TABLE Datenbanknamen festlege Datenbankprogrammierung 4
S insert into table Datenbankprogrammierung 8
M Create Table und setString Datenbankprogrammierung 2
M Create Table Datenbankprogrammierung 8
X SHOW TABLE STATUS FROM xxxx Datenbankprogrammierung 2
T CREATE TABLE in Access DB Datenbankprogrammierung 2
B datentyp boolean bei create table Datenbankprogrammierung 2

Ähnliche Java Themen


Oben