I’m trying to build a web page to better learn Java and SQL. My question is, is there a way in Java to make a generic SQL select statement? For example:
SELECT var1 FROM var2 WHERE var3=var4
or something of the sort.
My idea is to fill the vars with user selected items from the web page. I know this can be done in PHP using the Post method, but I’m not using PHP. Also, I’ve read about the Prepared Statement in Java, but seems only to work when the used after the comparison operator; ex:
SELECT * FROM table Where attr = ? &
Also, I do know i can do the hard coded version of "SELECT " + var1 + "FROM " + var2 + "WHERE attr = " + var3 + " " but that doesn’t seem very generic and prone to a lot of errors.
- Incase: I’m trying to build this test page using HTML & JSP.
What you are doing with the
?is parameterizing the query. The query can only be parameterized for values not names of tables or columns.Every time you run a query. The database has to create a query plan. If you are running the same query again and again, you can reduce this overhead by creating a
PreparedStatement.The first execution of
PreparedStatementwill generate the query plan. The subsequent executions will reuse the same plan.Same query here means, it is identical in all respects except values used in where clause, expressions etc.
If you change the Column or Table name or modify the structure of the query, then it is a different query and will require a different query plan. A PreparedStement is not useful in this case and you should stick to the hardcoded version you talked about. Because of this reason you will get an error if you try to parameterize Table or Column names in
PreparedStement.Having said that. It is not advisable to take such a generic approach for queries. If your queries are that simple, you can benefit from ORM tools. You would not have to maintain even a line of SQL. For complex queries you have an option of using ORM specific query language or JPQL or Native SQL. Look for JPA + Hibernate