After reviewing both of the articles I have come to my conclusion. I believe the author in the second link is referring to dynamic sql as appending the sql statement before executing it. Each subsequent time the sql statement is being executed it is a different sql
string all together. Not only are the values changing but maybe the columns he is selecting from changes as well. For instance, maybe I'll use a Stringbuffer to generate an sql statement depending on the parameters that are passed in to a method. Each time this method is called the sql string is different all together. I believe this is what the author is referring to as dynamic sql. If this is the case, then a Statement would be much more efficient than a PreparedStatement.
From what I have gathered out of the first article mentioned by gayle is that "Every time you execute a SELECT statement, the JDBC driver makes two round trips to the database. On the first round trip, it retrieves the metadata for the columns you are selecting. On the second round trip, it retrieves the actual data you selected." This rule applies to a Statement and a PreparedStatement. If you are executing a dynamic sql statement then there is overhead with the PreparedStatement since the PreparedStatement, on the first call to the database, stores it's metadata in memory. I can't imagine this being too much overhead since we are writing to memory and not disk, but it is still extra work being performed. In my opinion, a Statement is always going to be more efficient than a PreparedStatement if executing dynamic sql.
If an sql statement is not dynamic, meaning the columns and where clause stay the same during every iteration, than a PreparedStatement is more efficient than a Statement since after the first iteration the PreparedStatement stores the metadata. Each subsequent query only takes one round trip to get the actual data. When the second query is executed the PreparedStatement will always be 1 ahead of the Statement since the PreparedStatement stored it's metadata on the first iteration.
So to answer the question, it just depends on how you plan to execute your queries. If it's dynamic, use a Statement object, if only the values are changing and not the columns (metadata) use the PreparedStatement Object. Keep in mind that the articles referenced above only pertain to Oracle. Every JDBC driver adheres to the same implementation but access times may vary on different databases.
This is just my $.02 worth
cheers
Ryan