如何在 Java 中的 Prepared Select 语句中包含参数? [复制]

Posted

技术标签:

【中文标题】如何在 Java 中的 Prepared Select 语句中包含参数? [复制]【英文标题】:How to include parameters in Prepared Select Statement in Java? [duplicate] 【发布时间】:2020-05-22 15:22:12 【问题描述】:

我正在尝试在我的程序中运行一个简单的选择语句。插入和创建工作得很好。但我的选择查询没有得到任何结果。 如果我直接在 sqlite 控制台中运行该语句,我会得到结果,所以我认为我准备好的语句中一定有错误。

我在另一个 Java 类中有我的查询,并作为静态变量直接访问它们(这些也适用于创建和插入)

这里有什么:

Queries.java

[...]
    public static final String SELECT_TOPIC_BY_NAME_AND_DESCRIPTION =
            "SELECT * FROM topics WHERE name=? AND description=?";
[...]

Connector.java

[...]
for (Topic topic : scan.getTopicList()) 
            PreparedStatement topicStatement = connection.prepareStatement(Queries.SELECT_TOPIC_BY_NAME_AND_DESCRIPTION);
            topicStatement.setString(1, topic.getName());
            topicStatement.setString(2, topic.getDescription());
            ResultSet topic_resultSet = topicStatement.executeQuery();
            if (topic_resultSet.getFetchSize() == 1) 
                [...]
            
            else
                System.out.println("Couldn't Find Topic: name: "+topic.getName()+"; description: "+topic.getDescription()+"");
            
        
[...]

主题与我之前插入的主题相同,因此名称和描述无法更改。如果我运行它,它会给我以下输出:

找不到主题:name: Money;描述:Alles 是 mit Money zu 帽子

找不到主题:name: Banking;描述:Alles 是 mit 银行 zu tun hat

找不到主题:name: Money;描述:Alles 是 mit Money zu 帽子

找不到主题:name: Banking;描述:Alles 是 mit 银行 zu tun hat

但是如果在 sqlite 中运行我想要的 select 语句,它会给我正确的结果:

main> SELECT * FROM topics WHERE name='Money' AND description='Alles was mit Money zu tun hat'

1,Money,Alles was mit Money zu tun hat
3,Money,Alles was mit Money zu tun hat

感谢您的帮助

【问题讨论】:

查看关于fetch size not returning record count的答案。您需要反复拨打topic_resultSet.next() 【参考方案1】:

您的if 陈述正确。这个

if (topic_resultSet.getFetchSize() == 1) 

不返回行数。它与被匹配的查询也没有任何关系。你想要的

if (topic_resultSet.next()) 

检查一行。

【讨论】:

以上是关于如何在 Java 中的 Prepared Select 语句中包含参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在executeBatch()之前如何检查Prepared Statement是不是有一些批次?

启用 SQL 触发器时,Java 中的 Prepared Statement 失败

在 SparkSession.SQL 中执行 Prepared 和 Batch 语句

如何从 SQL 中的视图中选择? (一般错误:1615 Prepared statement需要重新准备)

未找到 Java Prepared statement 错误表

Java 和 Access - 使用 Prepared Statement 并获取日期