我是数据库和 SQL 的新手,3 天以来一直在尝试解决这个问题。我有一个使用 JDBC 查询 SQLite 数据库的 Java 应用程序。到目前为止,这工作得很好。但我无法弄清楚检索所需行所需的 SQL 查询。该表如下所示:
rowid | application | dstIP | dstPort | value_to_return
| | | |
0 | NULL | NULL | NULL | 26
1 | NULL | NULL | 80 | 1
2 | NULL | 192.168.178.31 | NULL | 2
3 | NULL | 192.168.178.31 | 80 | 3
4 | firefox | NULL | NULL | 4
5 | firefox | NULL | 80 | 5
6 | firefox | 192.168.178.31 | NULL | 6
7 | firefox | 192.168.178.31 | 80 | 7
我的目标是获取大多数列匹配的行,如果没有列匹配,则应选择第 0 行。这里有一些例子:
input -> row
firefox 192.168.178.31 80 -> 7
chrome 192.168.178.31 81 -> 2
chrome 192.168.178.30 82 -> 0
someapp 192.168.178.29 80 -> 1
到目前为止,我最好的猜测是这个查询
SELECT * FROM table WHERE (application IS ? OR application IS NULL)
AND (dstIP IS ? OR dstIP IS NULL)
AND (dstPort IS ? OR dstPort IS NULL)
ORDER BY application;
?s 替换为相应的输入值。此查询在不匹配的情况下返回第 0 行。但是如果有几个匹配,它当然会返回几行。
我可以在 Java 应用程序中选择我需要的行,但我希望数据库为我工作。
如果存储过程是解决这个问题的更好选择,我可以更改数据库,因为 SQLite 不支持。
我希望我对问题的描述足够准确。任何帮助将不胜感激。