我正在尝试使用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();
答案 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)
它与jdbc
,prepared-statements
或mysql
无关
这只是一个错误的sql
声明。
如果输入:
Select 'justanexample' from Vehicle
并且该表包含4行,您将获得4次
'justanexample'
'justanexample'
'justanexample'
'justanexample'
结果。
你没有指定你的表结构,但我想是 声明应该看起来像这样:
select * from Vehicle where license = ?