Как устранить предупреждение FindBugs «Подготовленный оператор генерируется из непостоянной строки»? - PullRequest
2 голосов
/ 21 ноября 2011

У меня есть следующий код, где FindBugs жалуется, что «Подготовленная инструкция генерируется из непостоянной строки в ..» во второй строке. Я попытался объявить sqlNew как final , но это не помогло. Я не манипулирую строкой где-либо еще. Как мне избавиться от этого предупреждения?

String sqlNew = "insert into table (itemkey, attribute, value, updateddate, updatedby)  values (?, ?, ?, getDate(), '')";
stmtNew = conn.prepareStatement(sqlNew);

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Я бы предложил объявить строку как переменную private static final в верхней части вашего класса, используя соглашение об именах ALL_CAPS:

private static final String SQL_NEW = "insert into table (itemkey, attribute, value, updateddate, updatedby)  values (?, ?, ?, getDate(), '')";
2 голосов
/ 23 ноября 2011

Ошибка пытается найти случаи, когда вы делаете

String query = "insert into table (itemkey, attribute, value, updateddate, updatedby)  values (?, ?, ?, " + getDate() + ", '')";

, то есть строка объединяется вместе.Это не имеет никакого отношения к тому, чтобы быть заключительным.

Findbugs ожидает, что строка будет загружена инструкцией LDC, и не будет иметь никаких операций StringBuilder.Причина в том, что вы могли бы сделать инъекцию sql, если бы сделали это.

Ваш пример выглядит отлично.Вы уверены, что это именно тот код, о котором сообщает findbugs?Если это так, то это ошибка в FindBugs.

...