Таким образом, кажется, что первая из ценностей интерпретируется как колонка, как это?
Поскольку у вас есть он так же, как 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, отделяя код от данных.