MySQL першае значэнне інтэрпрэтуецца як ColumnName

Выкарыстанне JDBC, я спрабую выканаць наступны SQL заяву:

INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount) VALUES (SomeString,6,4794,1,76)

Але гэта вяртае ErrorMessage

<�Р> Невядомы слупок 'SomeString' ў 'спісе поля'

Так здаецца, што першы з значэнняў інтэрпрэтуюцца як слупок, як гэта?

Ужо праверыў структуру табліцы, можа быць, я проста туннелируюсь на гэтым, але я проста не магу здацца, каб знайсці прычыну гэтай праблемы.

1
Паспрабуйце «SomeString» замест SomeString.
дададзена аўтар Peter Rader, крыніца
Радок у двукоссі зменных без двукоссяў :)
дададзена аўтар Sanyam Goel, крыніца
Радок у двукоссі зменных без двукоссяў :)
дададзена аўтар Sanyam Goel, крыніца
вы дадаць двукоссі ў радок?
дададзена аўтар duffy356, крыніца
вы дадаць двукоссі ў радок?
дададзена аўтар duffy356, крыніца
паспрабаваць «SomeString» замест
дададзена аўтар justMe, крыніца
паспрабаваць «SomeString» замест
дададзена аўтар justMe, крыніца

10 адказы

<�Р> Такім чынам, здаецца, першы з значэнняў інтэрпрэтуецца як слупок, як гэта?

Таму што ў вас ёсць гэта так жа, як SomeString , замест таго, як тэкст <�ет> значэнне напрыклад 'SomeString' . Гэта проста, як працуе SQL - і гэта як нармальны код таксама працуе, на самай справе. Калі ў вас:

String foo = bar;

можна было б чакаць, што будзе спрабаваць скапіяваць значэнне зменнай з імем бар , ці не так? Калі вы мелі на ўвазе радок з трох знакаў, Ь, а, г, вы будзеце выкарыстоўваць:

String foo = "bar";

Гэта так жа ў SQL.

Аднак, мяркуючы, што гэты SQL нарошчваецца ад рэальных значэнняў, вы павінны выкарыстоўваць PreparedStatement з параметрамі ў любым выпадку:

String sql = "INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount)"
             + " VALUES (?, ?, ?, ?, ?)";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, "SomeString");
pst.setInt(2, 6);
// etc

Такім чынам, вы будзеце пазбягаць нападаў з укараненнем SQL і праблемы пераўтварэнні радкі (напрыклад, для дат). Ён таксама трымае ваш SQL прыбіральнік, адлучаючы код ад дадзеных.

5
дададзена
<�Р> Такім чынам, здаецца, першы з значэнняў інтэрпрэтуецца як слупок, як гэта?

Таму што ў вас ёсць гэта так жа, як SomeString , замест таго, як тэкст <�ет> значэнне напрыклад 'SomeString' . Гэта проста, як працуе SQL - і гэта як нармальны код таксама працуе, на самай справе. Калі ў вас:

String foo = bar;

можна было б чакаць, што будзе спрабаваць скапіяваць значэнне зменнай з імем бар , ці не так? Калі вы мелі на ўвазе радок з трох знакаў, Ь, а, г, вы будзеце выкарыстоўваць:

String foo = "bar";

Гэта так жа ў SQL.

Аднак, мяркуючы, што гэты SQL нарошчваецца ад рэальных значэнняў, вы павінны выкарыстоўваць PreparedStatement з параметрамі ў любым выпадку:

String sql = "INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount)"
             + " VALUES (?, ?, ?, ?, ?)";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, "SomeString");
pst.setInt(2, 6);
// etc

Такім чынам, вы будзеце пазбягаць нападаў з укараненнем SQL і праблемы пераўтварэнні радкі (напрыклад, для дат). Ён таксама трымае ваш SQL прыбіральнік, адлучаючы код ад дадзеных.

5
дададзена

Радок павінна быць у адзінарныя двукоссі ( «»).

INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount) VALUES ('SomeString',6,4794,1,76)
2
дададзена

Радок павінна быць у адзінарныя двукоссі ( «»).

INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount) VALUES ('SomeString',6,4794,1,76)
2
дададзена

калі ўсе вы ўстаўляеце значэнне даты або радкоў, вы павінны заключыць з

альбо «» (адзінарныя двукоссі) [заўсёды выкарыстоўваць гэта]

або "« (задні клешч характар) [не заўсёды]

INSERT INTO мета (назва, hlcount, textcount, imgcount, linkcount) VALUES ( 'SomeString', 6,4794,1,76)

або

INSERT INTO мета (назва, hlcount, textcount, imgcount, linkcount) VALUES ( "SomeString", 6,4794,1,76)

1
дададзена

калі ўсе вы ўстаўляеце значэнне даты або радкоў, вы павінны заключыць з

альбо «» (адзінарныя двукоссі) [заўсёды выкарыстоўваць гэта]

або "« (задні клешч характар) [не заўсёды]

INSERT INTO мета (назва, hlcount, textcount, imgcount, linkcount) VALUES ( 'SomeString', 6,4794,1,76)

або

INSERT INTO мета (назва, hlcount, textcount, imgcount, linkcount) VALUES ( "SomeString", 6,4794,1,76)

1
дададзена

Змешчаны ў двукоссі SomeString.

INSERT INTO meta 
  (title, hlcount, textcount, imgcount, linkcount) 
VALUES ('SomeString',6,4794,1,76)

Гэта будзе прымушаць рухавік у разглядаючы яго як радковы литерал. У адваротным выпадку, ён будзе лічыць, што гэта тое, што можа быць вырашана з дапамогай імя слупка.

1
дададзена

Змешчаны ў двукоссі SomeString.

INSERT INTO meta 
  (title, hlcount, textcount, imgcount, linkcount) 
VALUES ('SomeString',6,4794,1,76)

Гэта будзе прымушаць рухавік у разглядаючы яго як радковы литерал. У адваротным выпадку, ён будзе лічыць, што гэта тое, што можа быць вырашана з дапамогай імя слупка.

1
дададзена

Вы павінны выкарыстоўваць адзінкавыя двукоссі «» SomeString.

 INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount) VALUES  ('SomeString',6,4794,1,76)  

таму што SomeString пазначае тэкставае значэнне, якое будзе ўстаўлена ў слупок загалоўка і тэксту заўсёды павінны быць акружаны адзінарныя двукоссі.

1
дададзена

Вы павінны выкарыстоўваць адзінкавыя двукоссі «» SomeString.

 INSERT INTO meta (title, hlcount, textcount, imgcount, linkcount) VALUES  ('SomeString',6,4794,1,76)  

таму што SomeString пазначае тэкставае значэнне, якое будзе ўстаўлена ў слупок загалоўка і тэксту заўсёды павінны быць акружаны адзінарныя двукоссі.

1
дададзена