== Immutable Queries

These are the best defense against SQL injection.  They either do not have data that could get interpreted or they treat the data as a single entity that is bound to a column without interpretation.

=== Static Queries
-------------------------------------------------------
select * from products;
-------------------------------------------------------

-------------------------------------------------------
select * from users where user = "'" + session.getAttribute("UserID") + "'"; 
-------------------------------------------------------

=== Parameterized Queries
-------------------------------------------------------
String query = "SELECT * FROM users WHERE last_name = ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, accountName);
ResultSet results = statement.executeQuery();
-------------------------------------------------------

=== Stored Procedures
Only if stored procedure does not generate dynamic SQL
