我正在做一个项目,我需要从数据库中打印出数据。举个例子,假设在我的数据库中,我只有以下条目-
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();
}
}
任何帮助将不胜感激。