# FindBugs und PreparedStatement aus einer Datei lesen



## michael6666 (15. Apr 2010)

Hallo allerseits,

ich bin neu in diesem Forum und hoffe zu folgendem Problem Hilfe zu bekommen:

Ich lade eine SQL-Query aus einer (Konfigurations-)Datei und führe sie als PreparedStatement aus, etwa so:


```
query = loadQueryFromFile();

ResultSet resultSet = null;
PreparedStatement preparedStatement = null;

try {
    preparedStatement = connection.prepareStatement(query);    // hier meckert FindBugs
    // set parameters
    
    resultSet = preparedStatement.executeQuery();

    // process result set
    
} finally {
    // clean up resultSet and preparedStatement
}
```

Jetzt meckert FindBugs (1.3.9) "A prepared statement is generated from a nonconstant String" (SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING). Gibt es irgendeine Möglichkeit, eine Query aus einer Datei zu lesen ohne daß ein FindBugs-Fehler erscheint? Wenn ich die Prüfung für diesen Fehler ausschalte, dann wird er ja im gesamten Projekt nicht mehr erkannt, ich möchte aber nur diese Stelle so umschreiben (markieren?), daß sie von FindBugs akzeptiert wird.

Vielen Dank und viele Grüße,
Michael


----------



## mvitz (15. Apr 2010)

final String query = loadFromFile();

evtl.?


----------



## michael6666 (16. Apr 2010)

Das bringt leider nichts. Das Problem ist ja nicht, daß die Variable "query" verändert werden kann, sondern daß sie aus nicht-konstanten Teilen zusammengesetzt wird (z. B. wenn man sie aus einer Datei liest).

Michael


----------



## maki (16. Apr 2010)

FindBugs hat nicht immer recht, aber oft 
Solche sog. "false positives" kannst du ignorieren, oder die FindBugs Annotationen einsetzen.
Ich tendiere da aber eindeutig zum ignorieren.


----------



## michael6666 (16. Apr 2010)

Ignorieren kommt nicht in Frage, weil das Build-System verlangt, daß der Code keine FindBugs-Warnungen hervorbringt. Annotationen (kannte ich noch nicht bei FindBugs) sind eine Lösung für mich, Vielen Dank für den Tip!

Michael


----------



## fastjack (16. Apr 2010)

Tja, vielleicht sollte man dann mal am Build-System arbeiten ... Oder alles als Konstanten festverdrahten, wobei dann das dynamische flöten geht. Ich würde eher ersteres machen, warum soll man sich einer solchen verkorksten Build-Einstellung unterwerfen?


----------



## michael6666 (16. Apr 2010)

Wir benutzen das Build-System zur Steigerung der Code-Qualität.

Michael


----------



## maki (16. Apr 2010)

michael6666 hat gesagt.:


> Wir benutzen das Build-System zur Steigerung der Code-Qualität.
> 
> Michael


Es bleibt aber mehr als fraglich, ob die Codequalität dadurch steigt dass man viele FindBugs Annotationen quer über den Code streuen muss um dem CI Server zufriedenzustellen.

IMHO ist FindBugs eher für "menschliche" Coderewievs etc. geeignet, als um einen CI Server zu sagen ob der Build Ok ist oder nicht.


----------



## michael6666 (16. Apr 2010)

Wie kann man es Deiner Meinung nach besser machen? Bei menschlichen Code-Reviews will ich nicht jedes Mal dieselben x Warnungen anschauen und prüfen, ob hier etwas getan werden muß oder nicht. Durch eine Annotation kann ich sagen, daß der entsprechende Code für mich so in Ordnung ist: 1 Mal geprüft und für gut befunden.


----------



## xerberuz (16. Apr 2010)

Ich finde es auch besser mit einer Annotation zu arbeiten. Damit hat man auch gleich dokumentiert, dass man sich Gedanken gemacht hat. Eine alternative ist noch eine findbugs-filter Datei. Mit der kann man für bestimmte Klassen bestimmte Fehler ausschalten.


----------



## Gelöschtes Mitglied 5909 (17. Apr 2010)

also ganz ehrlich: ich möchte keine FindBugs Dependency im meinem Code haben...
wenn dann doch über die exclude xml


----------



## XHelp (17. Apr 2010)

FindBugs, Checkstyle, PMD usw. zu verwenden macht nur Sinn, wenn die Einstellungen genau an das Projekt angepasst wurden sind.
Diese Fehlermeldung sagt dir folgendes:
query ist nicht konstant, also könnte jemand es verändern um so SQL Injection durchzuführen.
Aber wenn du es auf deinem Code beziehst: da kann man genau so gut die Datei verändern, so dass schon das bösartige Statement eingelesen wird.


----------

