我正在开发一个项目,我需要从数据库中打印出数据。让我们举一个例子,假设在我的数据库中,我只有以下条目 -
Hello 1.0.0
World 1.0.0
然后,我将调用数据库的Java方法将返回上面数据的地图。
我的地图将包含以下数据 -
Key as Hello, Value as 1.0.0
Key as World, Value as 1.0.0
假设,我是第一次启动程序,然后使用下面的代码将它打印出来,这非常好。
{Hello=1.0.0, World=1.0.0}
然后我每2秒运行一次后台线程,它将调用数据库并从数据库中再次获取所有数据。并且每两秒钟,它会打印出相同的东西 - (并且我的代码根据它正常工作)
{Hello=1.0.0, World=1.0.0}
现在有趣的是,假设我的应用程序正在运行,并且有人像这样更改了数据库条目 -
Hello 1.0.1
World 1.0.0
意思是,版本因Hello而改变,现在它是1.0.1并且我的应用程序正在运行,所以现在它将打印出来的代码基于我的代码?像这样的东西 -
{Hello=1.0.1, World=1.0.0}
但这不是我要找的东西。它应该打印出如下所示,仅表示已更改的条目
{Hello=1.0.1}
我希望问题很清楚。下面是我到目前为止的代码。它每次只打印出数据库中的所有条目,这不是我想要的。
我想在程序第一次启动时打印出所有内容,但是如果程序启动后,它应该只打印出已更改的内容或任何新条目。
以下是我的代码: -
public class Graph {
public static Map<String, String> bundleList = new LinkedHashMap<String, String>();
public static void main(String[] args) {
getAttributesFromDatabase();
printOutBundleInformation();
loggingAfterEveryXMilliseconds();
}
private static void printOutBundleInformation() {
System.out.println(bundleList);
}
private static void getAttributesFromDatabase() {
Map<String, String> bundleInformation = new LinkedHashMap<String, String>();
bundleInformation = getFromDatabase();
if(!bundleInformation.isEmpty()) {
bundleList = bundleInformation;
}
}
private static Map<String, String> getFromDatabase() {
Map<String, String> hello = new LinkedHashMap<String, String>();
// In actual scenario, I will have a database call here
hello.put("Hello", "1.0.0");
hello.put("World", "1.0.0");
return hello;
}
private static void loggingAfterEveryXMilliseconds() {
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
}
getAttributesFromDatabase();
printOutBundleInformation();
}
}
}.start();
}
}
任何帮助都将受到赞赏。
答案 0 :(得分:0)
您需要在名为last modified(日期与时间)的表中添加额外的列。每次查询数据库时都会传递上次访问时间(例如getFromDatabase(上次访问时间))。您需要在程序中保留上次访问时间。在查询中,您需要根据上次修改的字段验证上次访问时间。
答案 1 :(得分:0)
MapDifference.html#entriesDiffering()
可能就是您所需要的。
又快又脏:
public class Graph {
public static Map<String, String> bundleList = new LinkedHashMap<String, String>();
private static Map<String, String> oldBundleList = new LinkedHashMap<String, String>();
// ...
private static void getAttributesFromDatabase() {
Map<String, String> bundleInformation = new LinkedHashMap<String, String>();
bundleInformation = getFromDatabase();
if(!bundleInformation.isEmpty()) {
oldBundleList = bundleList;
bundleList = bundleInformation;
}
}
// ...
private static void loggingAfterEveryXMilliseconds() {
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
}
getAttributesFromDatabase();
final Map<String, ValueDifference<String>> entriesDiffering = Maps.difference(oldBundleList, bundleList).entriesDiffering();
if (!entriesDiffering.isEmpty()) {
for (String key : entriesDiffering.keySet()) {
System.out.println("{" + key + "=" + bundleList.get(key) + "}");
}
}
// printOutBundleInformation();
}
}
}.start();
}
}