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

问题描述 投票:0回答:1

我想在我的程序中运行一个简单的选择语句。Insert和Create工作得很好,但我的select查询却没有得到任何结果。但是我的select查询没有得到任何结果.如果我直接在sqlite控制台中运行语句,我得到了结果,所以我想我一定是在我准备的语句中出现了错误。

我把我的查询放在另一个Java-Class中,并直接以静态变量的形式访问它们(这些查询对于创建和插入也是有效的)。

这里是我有什么。

Queries. java

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

连接器.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()+"}");
            }
        }
[...]

话题是我之前插入的那个,所以名字和描述不可能有变化。如果我运行它,它给我以下输出。

Couldn't Find Topic: {name: Money; description: {name: Money; description: Alles was mit Money zu tun hat}

找不到主题。{name: Banking; description: Alles was mit Banking zu tun hat}

找不到主题。{name: Money; description: Alles was mit Money zu tun hat}

找不到主题。{name: Banking; description: Alles was mit Banking 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

我希望得到任何帮助

java database sqlite prepared-statement where-clause
1个回答
0
投票

你的 if 声明是 正确的。这个

if (topic_resultSet.getFetchSize() == 1) {

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

if (topic_resultSet.next()) {

来检查行。

© www.soinside.com 2019 - 2024. All rights reserved.