Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQLServer查询在SQLServer中运行良好,但同一查询不适用于JDBI_Mysql_Sql Server_Intellij Idea_Jdbi - Fatal编程技术网

Mysql SQLServer查询在SQLServer中运行良好,但同一查询不适用于JDBI

Mysql SQLServer查询在SQLServer中运行良好,但同一查询不适用于JDBI,mysql,sql-server,intellij-idea,jdbi,Mysql,Sql Server,Intellij Idea,Jdbi,为什么我可以在Sql Server中很好地执行以下查询 SELECT notificationMessage FROM NotificationMessages WHERE timesUsed < 2 编辑2 @兹洛斯特:我不会说这是你链接的帖子的完全复制品。因为他们的问题是将一个列表绑定到一个查询,所以我可以很好地使用我的解决方案。我的问题是,我无法理解为什么我不能对我的查询进行简单的低于操作,例如WHERE 1

为什么我可以在Sql Server中很好地执行以下查询

SELECT notificationMessage FROM NotificationMessages WHERE timesUsed < 2
编辑2
@兹洛斯特:我不会说这是你链接的帖子的完全复制品。因为他们的问题是将一个列表绑定到一个查询,所以我可以很好地使用我的解决方案。我的问题是,我无法理解为什么我不能对我的查询进行简单的低于操作,例如WHERE 1<2。我没有意识到,<是StringTemplate保留的字符。但是是的,你给出的链接有解决我问题的方法“…括号<像这样\<…”,但我不同意说它本身的问题是重复的

所以他们的问题是“如何将列表绑定到语句中的sql查询?”

我的问题是“为什么比较运算符在JDBISQL中不起作用”


这当然是因为我使用注释
@UseStringTemplate3StatementLocator
使我的列表映射到
语句中的
。我有工作,他们没有。但我不能让我的工作低于或高于任何形式的运作

我找到了查询问题的解决方案,在搜索JDBI的另一个主题时,我偶然发现了这个问题 我特别注意到这句话


还请注意,对于此注释,您不能使用“为什么要使用StringTemplate和JDBI?”?我对该主题的探索表明,它们非常相似,对于JDBI,您不需要StringTemplate,因为它们基本上使用相同的方法来建模SQL查询执行(从应用程序代码的角度)。@zloster,因为我有一些查询在(…)中使用
语句,并且为了能够在
语句中的
中绑定我的组,我需要注释来使
@BindIn
工作。请参阅上面我链接到的帖子。我选择在类级别上做,也许我可以在方法级别上做,但我还没有尝试过。因为
谢谢你的解释。我错过了JDBI requeires
StringTemplate
中的解决方案。这提醒我在即将发布的JDBI3中检查如何处理这一问题。我在这里发现了非常类似的问题:在那里查看链接文章。它来自JDBI的原始作者。这里描述了两种方法:数据库特定的方法和另一种使用
StringTemplate
的方法。可能重复@zloster,我不会说它与您链接的帖子完全相同。因为他们的问题是将一个列表绑定到一个查询,所以我可以很好地使用我的解决方案。我的问题是,我不明白为什么我不能对我的查询执行一个简单的
低于
的操作,例如
WHERE 1<2
。我没有意识到

@SqlQuery("SELECT notificationMessage FROM NotificationMessages WHERE timesUsed < 2")
List<String> getNotificationMessages();
public interface NotificationDAO {
@SqlQuery("SELECT id, notificationMessage, timesUsed, messageType, messageDays FROM NotificationMessages WHERE messageType = 'REMINDER'")
    List<NotificationMessage> getReminderNotificationMessages();
}

public class NotificationResource {
    ...
    private NotificationMessage pickNotificationMessage(){
        List<NotificationMessage> notificationMessages = notificationDAO.getReminderNotificationMessages();
        // Extract the number of times a message has been sent out to users, store in Integer list.
        List<Integer> timesUsedList = notificationMessages.stream().map(nm -> nm.getTimesUsed()).collect(Collectors.toList());
        // Remove all those messages which have been used once more than others. //TODO maybe another type of removal of messages
        List<NotificationMessage> notificationMessagesTruncated = notificationMessages.stream().filter(nm -> nm.getTimesUsed() <= Collections.max(timesUsedList)-1).collect(Collectors.toList());
        ...
    }
    ...
}