MySQL сначала оценивают интерпретируемый как columnname

Используя JDBC, я пытаюсь выполнить следующий SQL-оператор:

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

Но это возвращает errormessage

Неизвестная колонка 'SomeString' в 'cписке полей'

Таким образом, кажется, что первая из ценностей интерпретируется как колонка, как это?

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

1
добавлено
Просмотры: 2
Попробуйте "SomeString" вместо SomeString.
добавлено автор Peter Rader, источник
Последовательность в переменных кавычек без кавычек:)
добавлено автор Sanyam Goel, источник
Последовательность в переменных кавычек без кавычек:)
добавлено автор Sanyam Goel, источник
вы добавляли кавычки к своей последовательности?
добавлено автор duffy356, источник
вы добавляли кавычки к своей последовательности?
добавлено автор duffy356, источник
попробуйте ' someString' вместо этого
добавлено автор justMe, источник
попробуйте ' someString' вместо этого
добавлено автор justMe, источник

10 ответы

Таким образом, кажется, что первая из ценностей интерпретируется как колонка, как это?

Поскольку у вас есть он так же, как SomeString , вместо как текст стоимость , такая как 'SomeString' . Это, как SQL работает - и это - как нормальный код работает также, действительно. Если вы имели:

String foo = bar;

вы ожидали бы, что, чтобы попытаться скопировать ценность названной переменной бар , не так ли? Если бы вы имели в виду ряд из трех знаков, b, a, r, вы использовали бы:

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;

вы ожидали бы, что, чтобы попытаться скопировать ценность названной переменной бар , не так ли? Если бы вы имели в виду ряд из трех знаков, b, a, r, вы использовали бы:

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 meta (название, hlcount, textcount, imgcount, linkcount) ЦЕННОСТИ ('SomeString', 6,4794,1,76)

или

INSERT INTO meta (название, hlcount, textcount, imgcount, linkcount) ЦЕННОСТИ ("SomeString", 6,4794,1,76)

1
добавлено

когда когда-либо вы вставляете дату или натягиваете ценности, необходимо приложить к

любой '' (одинарные кавычки) [всегда использует это]

или, "" (назад помечают характер) [не всегда]

INSERT INTO meta (название, hlcount, textcount, imgcount, linkcount) ЦЕННОСТИ ('SomeString', 6,4794,1,76)

или

INSERT INTO meta (название, hlcount, textcount, imgcount, linkcount) ЦЕННОСТИ ("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
добавлено