java - 带有空参数的准备语句

标签 java sql prepared-statement

我正在开发一个小数据库程序,可以轻松进行选择查询。

该程序使用 GUI,您可以在其中输入搜索参数。如果您没有输入所有参数,它们将由查询结果完成。所以我尝试检查文本框中的参数是否为空/空并将占位符设置为“*”。

但是当我试图跑的时候。即使使用编程的占位符,它也会给我一个 SQLException 语法错误。

我将发布整个代码的精简版,技术上是一样的。

PreparedStatement Statement = connection.prepareStatement("select * From t_person where user_a = ? "+ "AND where dasatz_a = ? " + "AND where user_g = ? ");

if (Parameter.get(0) == null) {
    Parameter.set(0, "*") };

Statement.setString(1, Parameter.get(0));

等等。

参数是一个 ArrayList,其中包含来自文本框的参数。

最佳答案

如果没有为“已过滤”列指定参数,则不要以任何方式过滤该列。 动态准备您的查询以仅包含指定的参数。

Map<Integer, String> statementParams = new HashMap<>();
String query = "select * From t_person";
boolean firstCondition = true;

if (Parameter.get(0) != null) {
    if (firstCondition) {
        query += " where ";
        firstCondition = false;
    } else {
        query += " and ";
    }
    query += "user_a = ?";
    statementParams.put(1, Parameter.get(0));
}
// other params
PreparedStatement Statement = connection.prepareStatement(query);

for (MapEntry<Integer, String> entry : statementParams.entrySet()) {
    Statement.setString(entry.getKey(), entry.getValue());
}

关于java - 带有空参数的准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24364081/

相关文章:

mysql - SQL:返回具有给定项目值子集的项目的查询

java - gss 名称在 java 中因爱尔兰 fada 字符而损坏

java - 错误: Bad Base64Coder input character

mysql - 更新/重置每个 ID 子集的列值(使用 "counter")

sql - 替换日期的某一部分

java - 在选择查询java中PrepareStatement不起作用

java - java中sql的字符串参数和SELECT准备语句

java - MySQL TEXT 的 java.sql.Types 等效项是什么?

java - 为什么 Catch(Exception) 几乎总是一个坏主意?

java - 我们可以在一种方法中使用准备好的语句来使用两个查询吗