Error "Unknown column ... in field list" bei INSERT INTO

Error "Unknown column ... in field list" bei INSERT INTO

am 08.02.2006 07:46:46 von Jochen Bercker

Hi!

Bei folgendem INSERT INTO dieser Tabelle (andere funktionieren) bekomme
ich folgende Fehlermeldung:

java.sql.SQLException: Unknown column 'Water' in 'field list'

'Water' ist doch aber überhaupt kein Spaltenname, sondern ein
potentieller Zeileneintrag!?
MySQL Bug oder mein Code? Danke für jede Hilfe!

Jochen
--

MySQL Version: 5.0.16-nt
JDBC Treiber: mysql-connector-java-3.1.12

Hier das INSERT Statement:

String insertSubject =3D "INSERT INTO subject("+
"subid, "+
"title, "+
"priority, "+
"deadline"+
") VALUES (" +
"NULL" +","+
"Water, "+
"High, "+
"2006-3-3"+
")";


Hier das Create Table Statement der Tabelle:

CREATE TABLE subject(" +
"subid SMALLINT(5) UNSIGNED AUTO_INCREMENT PRIMARY KEY," +
"title VARCHAR(100) NOT NULL," +
"priority ENUM('HIGH','MEDIUM','NORMAL')," +
"deadline DATE)

Re: Error "Unknown column ... in field list" bei INSERT INTO

am 08.02.2006 08:27:15 von Nico Haase

Hallöchen,
*Jochen Bercker* schrub:
> 'Water' ist doch aber überhaupt kein Spaltenname, sondern ein
> potentieller Zeileneintrag!?

Dann solltest du auch 'Water' reinschreiben. Ich kann kein Java, aber
nach
String insertSubject = "INSERT INTO subject("+
"subid, "+
"title, "+
"priority, "+
"deadline"+
") VALUES (" +
"NULL" +","+
"Water, "+
"High, "+
"2006-3-3"+
")";

müsste in insertSubject etwa folgendes stehen:

INSERT INTO subject(subid, title, priority, deadline)
VALUES (NULL, Water, High 2006-3-3)

Definitiv fehlen hier die Anführungszeichen um die Spalteninhalte.
mfg
Nico

--
www.buchtips.net - Rezensionen online

Re: Error "Unknown column ... in field list" bei INSERT INTO

am 08.02.2006 10:07:42 von Axel Schwenke

"Jochen Bercker" wrote:
>
> String insertSubject = "INSERT INTO subject("+
> "subid, "+
> "title, "+
> "priority, "+
> "deadline"+
> ") VALUES (" +
> "NULL" +","+
> "Water, "+
> "High, "+
> "2006-3-3"+
> ")";



Das fehlende Quoting hat Nico ja schon genannt. Außerdem solltest
du nochmal über deinen Programmierstil nachdenken. Solange da nur
Stringliterale stehen, gibt es keinen Grund, die per '+' Operator
zu verketten. So wie ich Java einschätze, macht es die Verkettung
am Ende wohl gar erst zur Laufzeit. Wenn die Werte später mal aus
Variablen kommen, wirst du vermutlich lieber prepared Statements
verwenden wollen.

In Programmiersprachen die sowas haben, kommt sonst auch sprintf()
ganz gut, um Werte in SQL-Statements zu füllen:

$sql = sprintf("INSERT INTO foo (bar, baz) VALUES (%d, '%s')",
$var1, escape_string($var2));


XL

Re: Error "Unknown column ... in field list" bei INSERT INTO

am 08.02.2006 15:02:58 von Dirk Brosowski

Axel Schwenke schrieb:
> "Jochen Bercker" wrote:
>
>> String insertSubject = "INSERT INTO subject("+
>> "subid, "+
>> "title, "+
>> "priority, "+
>> "deadline"+
>> ") VALUES (" +
>> "NULL" +","+
>> "Water, "+
>> "High, "+
>> "2006-3-3"+
>> ")";
>
>
>
>
> Das fehlende Quoting hat Nico ja schon genannt. Außerdem solltest
> du nochmal über deinen Programmierstil nachdenken. Solange da nur
> Stringliterale stehen, gibt es keinen Grund, die per '+' Operator
> zu verketten. So wie ich Java einschätze, macht es die Verkettung
> am Ende wohl gar erst zur Laufzeit. Wenn die Werte später mal aus
> Variablen kommen, wirst du vermutlich lieber prepared Statements
> verwenden wollen.
>
> In Programmiersprachen die sowas haben, kommt sonst auch sprintf()
> ganz gut, um Werte in SQL-Statements zu füllen:
>
> $sql = sprintf("INSERT INTO foo (bar, baz) VALUES (%d, '%s')",
> $var1, escape_string($var2));
>

Und in Java sollte man am besten für sowas PreparedStatements verwenden.
Hierbei ist es eher uninteressant, dass diese inzwischen Serverseitig
unterstützt werden, sondern wichtig ist, dass man Parameter nicht selbst
"escapen" muss. Dann klappt das auch vollkommen problemlos ;)

Grüße

Dirk