As a rexem wrote SQL statments are code - they should be treated like code, not externalized (unles you have good reason) but placed with code that process SQL data from/to that statements. Todays framework ORMs/iBatis offer a lot of simplifications for day-to-day JDBC development.
Some answers to your question you'll find in this question:) The problem how your SQL statments will be stored depends of king of your application. What are your needs? High security, ease of writing code or maintenance, crossplatform or vendor lock-in? The next question do you need pure SQL or ORM framework will be good?
* Hardcoded in business objects
* Encapsulate in separate classes e.g. Data Access Objects
Simplest solution (P), hard to maintain (C)
* Embedded in SQLJ clauses
Beter syntax checking (P), lack od dynamic queries (C), lower perfomance than JDBC (C), no so popular (C)
* Metadata driven (decouple the object schema from the data schema - describe the mappings between them in metadata)
It must be specific case you should do that (C) or if you mean ORM (P) ;)
* External files (e.g. Properties or Resource files)
Easy to mantain (P) but harder to check for errors (C)
* Stored Procedures
High secuirty (P), code hard to mantain an vendor lock-in problems (C)