JDBC preparedStatement不起作用

时间:2009-06-02 23:45:12

标签: mysql jdbc prepared-statement

我正在尝试使用prepareStatement功能。代码如下。执行后,它返回一堆vlicense字符串而不是值。

当代码完成statement.setString()时,语句变为:

select 'vlicense' from Vehicle

但是,它必须是:

select vlicense from Vehicle

没有引号。谁能告诉我这是什么问题?

statement = oConnection.prepareStatement("select ? from Vehicle");
String tempString = "vlicense";
statement.setString(1, tempString);
resultSet = statement.executeQuery();

4 个答案:

答案 0 :(得分:4)

您不能将参数标记用于列名,表名,数据类型名称或基本上不是数据的任何内容。

答案 1 :(得分:2)

当您将绑定变量添加到这样的语句时,它会被转义,因此示例中的实际SQL字符串将作为“SELECT'vlicense'FROM Vehicle'转到数据库,选择文字字符串而不是列名你想要的。

在准备之前,需要将变量列名称连接到SQL语句中:

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

绑定变量实际上是用于查询参数而不是动态查询。

答案 2 :(得分:0)

?不能用于指定字段,只是在查询中执行一些过滤器,如:

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

在您的情况下,您的查询构建为:

select 'vlicense' from Vehicle

这意味着:为“车辆”的每个记录获取一个STRING'vlicense'。并且您将获得 n 重复的字符串,具体取决于表中的记录数

答案 3 :(得分:0)

它与jdbcprepared-statementsmysql无关 这只是一个错误的sql声明。

如果输入:

Select 'justanexample' from Vehicle

并且该表包含4行,您将获得4次

'justanexample'
'justanexample'
'justanexample'
'justanexample'

结果。

你没有指定你的表结构,但我想是 声明应该看起来像这样:

select * from Vehicle where license = ?