rspec/rules/S3777/java/rule.adoc

41 lines
1.4 KiB
Plaintext

It is not uncommon, for instance when dealing with SQL requests, to have repeated calls to ``++StringBuilder.append()++`` to create a long (sometimes really long) String that will be then passed to the appropriate subsystem (e.g. jdbc.Statement()). This is very undesirable because it makes it more difficult to read, and maintain, the statement in the String due to overlapping syntaxes.
It is highly recommended to address such a case with an external text file loaded as a resource.
== Noncompliant Code Example
----
sb = new StringBuilder()
.append("SELECT CASE ")
.append("WHEN year = 'FR' THEN 'FR'")
.append("WHEN year = 'SO' THEN 'SO'")
.append("WHEN year = 'JR' THEN 'JR'")
.append("WHEN year = 'SR' THEN 'SR'")
.append("ELSE 'No Year Data' END AS year_group,")
.append("COUNT(1) AS count")
.append("FROM benn.college_football_players")
.append("GROUP BY CASE WHEN year = 'FR' THEN 'FR'")
.append("WHEN year = 'SO' THEN 'SO'")
.append("WHEN year = 'JR' THEN 'JR'")
.append("WHEN year = 'SR' THEN 'SR'")
.append("ELSE 'No Year Data' END");
----
== Compliant Solution
----
InputStream inputStream = this.getClass().getResourceAsStream("MySQLRequest.txt");
----
ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)
include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]