【问题标题】:parameter validation in PreparedStatementPreparedStatement 中的参数验证
【发布时间】:2011-08-26 08:59:14
【问题描述】:

我正在开发一个使用 PreparedStatement 的 java 应用程序。

SELECT FIELD1, FIELD2 FROM MYTABLE WHERE (FIELD1='firstFieldValue' OR FIELD1='' or 'firstFieldValue'='');

firstFieldValue 是一个参数。并且需要在SQL中检查它的值是否为空。

我使用以下参数化 SQL 创建了一个准备好的语句:

SELECT FIELD1, FIELD2 FROM MYTABLE WHERE (FIELD1=? OR FIELD1='' or ?='');

我设置的值如下:

preparedStatementInstance.setString(1, this.firstFieldValue);
preparedStatementInstance.setString(2, this.firstFieldValue);

这种方式行不通。执行失败。

我认为准备好的语句 SQL 是错误的。

对于这种情况,我该如何修复准备好的语句的 SQL?

【问题讨论】:

  • 你能试试把“?”在右手边?
  • 好点,我现在去看看,谢谢
  • 这种方式行不通,不过谢谢。

标签: java sql jdbc


【解决方案1】:

只需在 java 中检查即可。

if firstFieldValue.equals("") 

then SELECT FIELD1, FIELD2 FROM MYTABLE 

else  

SELECT FIELD1, FIELD2 FROM MYTABLE WHERE (FIELD1=? OR FIELD1='');

preparedStatementInstance.setString(1, this.firstFieldValue); 

【讨论】:

  • And it is necessary to check that its value is empty in SQL. 更好的问题是为什么需要检查 SQL。
  • 实际的 SQL 比我指定的要复杂。我只是想知道是否可以以这种方式使用传递的参数:?=''
  • 好吧。从一般情况来看,很少用 SQL 来做。用 SQL 做有什么好处吗?
  • 我知道这不是一种优雅的方式。好的,我会找到解决方法。谢谢。
  • 这些检查适合在 java 中进行。没有理由让 DB 去做。
【解决方案2】:

在执行 sql 时没有“我认为它是错误的”,要么它是正确的并且它执行查询,要么 sql 是错误的并且你得到一个 sqlexception

如果失败,您应该向论坛提供堆栈跟踪,这样我们就不必读心了。

“空”是什么意思? 空字符串或数据库中的 null

【讨论】:

  • 空字符串。只是想检查参数是否为空。
猜你喜欢
  • 2015-08-10
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多