如何在 Java 中的 Prepared Select 语句中包含参数?
How to include parameters in Prepared Select Statement in Java?
我正尝试在我的程序中 运行 一个简单的 select 语句。插入和创建工作得很好。但是我的 select 查询没有得到任何结果。
如果我 运行 直接在 sqlite 控制台中的语句我得到结果,所以我想象我准备好的语句中一定有错误。
我在另一个 Java-Class 中有我的查询,并直接将它们作为静态变量访问(它们也适用于创建和插入)
这是我的:
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()+"}");
}
}
[...]
主题与我之前插入的主题相同,因此名称和描述不能更改。如果我 运行 它会给我以下输出:
Couldn't Find Topic: {name: Money; description: Alles was mit Money zu
tun hat}
Couldn't Find Topic: {name: Banking; description: Alles was mit
Banking zu tun hat}
Couldn't Find Topic: {name: Money; description: Alles was mit Money zu
tun hat}
Couldn't Find Topic: {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
如有任何帮助,我将不胜感激
您的 if
陈述 不 正确。这个
if (topic_resultSet.getFetchSize() == 1) {
不return行计数。它也与匹配的查询没有任何关系。你想要
if (topic_resultSet.next()) {
检查一行。
我正尝试在我的程序中 运行 一个简单的 select 语句。插入和创建工作得很好。但是我的 select 查询没有得到任何结果。 如果我 运行 直接在 sqlite 控制台中的语句我得到结果,所以我想象我准备好的语句中一定有错误。
我在另一个 Java-Class 中有我的查询,并直接将它们作为静态变量访问(它们也适用于创建和插入)
这是我的:
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()+"}");
}
}
[...]
主题与我之前插入的主题相同,因此名称和描述不能更改。如果我 运行 它会给我以下输出:
Couldn't Find Topic: {name: Money; description: Alles was mit Money zu tun hat}
Couldn't Find Topic: {name: Banking; description: Alles was mit Banking zu tun hat}
Couldn't Find Topic: {name: Money; description: Alles was mit Money zu tun hat}
Couldn't Find Topic: {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
如有任何帮助,我将不胜感激
您的 if
陈述 不 正确。这个
if (topic_resultSet.getFetchSize() == 1) {
不return行计数。它也与匹配的查询没有任何关系。你想要
if (topic_resultSet.next()) {
检查一行。