views:

283

answers:

4

I'm trying to use the prepareStatement function. The code is below. After it executes, it returns me a bunch of string 'vlicense' instead of the the values. When the code finishing the statement.setString(), the statement becomes "select 'vlicense' from Vehicle". However, it needs to be "select vlicense from Vehicle" without the quotation mark. Can anyone tell me what's the problem? Thanks a lot.

statement = oConnection.prepareStatement("select ? from Vehicle");

String tempString = "vlicense";

statement.setString(1, tempString); resultSet = statement.executeQuery();

+4  A: 

You can't use parameter markers for column names, table names, data type names, or basically anything that isn't data.

Chris Jester-Young
A: 

The ? can't be used to specify the fields, just to do some filters in your query like:

statement = conn.prepareStatement("select field from Vehicle where name=?");

In your case your query is built as:

select 'vlicense' from Vehicle

which means: GET ME A STRING 'vlicense' FOR EACH RECORD OF 'Vehicle'. And you'll get n repeated strings depending on the number of records in your table

victor hugo
+1  A: 

When you add a bind variable to a statement like this it is escaped, so that actual SQL string in your example would go to the database as "SELECT 'vlicense' FROM Vehicle', selecting a literal string instead of the column name you want.

You need to concatenate that variable column name into your SQL statement before you prepare it:

statement = oConnection.prepareStatement("SELECT " + vlicense + " FROM Vehicle");

Bind variables are really for query parameters as opposed to dynamic queries.

Rob Beardow
A: 

Hi. It has nothing to do with jdbc, prepared-statements or mysql.
It's just a wrong sql statement.

If you type:
"Select 'justanexample' from Vehicle"
and the table contains 4 lines, you will get 4 times 'justanexample'
'justanexample'
'justanexample'
'justanexample'
as result.

You did not specify your the table structure, but I guess the statement should somehow look like this:
"select * from Vehicle where license = ?"

Kind Regards Chris