使用Java HashMap作为数据库缓存的jdbc
我偶然发现了一位讲师提供的这段示例代码,并注意到了一些奇怪的事情:在执行新的insert查询之前,必须清空数据库中的数据(我假定是为了避免数据库中的冗余数据)
有没有办法避免这种通过hashmaps将数据插入数据库的迂回方式
public void saveCustomers() throws ClassNotFoundException, SQLException {
Statement statement = connection.createStatement();
String query = "delete from customer";
statement.executeUpdate(query);
Iterator customers = HRMS.Customers.entrySet().iterator();
while (customers.hasNext()) {
Customer customer;
Map.Entry customerMap = (Map.Entry) customers.next();
customer = (Customer) customerMap.getValue();
query = "insert into customer (memberId, name, nicn, gender, contact) "
+ "values ('" + customer.getMemberId() + "', '" + customer.getName() + "',"
+ " '" + customer.getId() + "', '" + customer.getGender().toString() + "', '" + customer.getContact() + "');";
statement.executeUpdate(query);
}
}
编辑:清除HashMap
并同时将数据插入数据库(可能使用不同的线程)是否会有所改进
# 1 楼答案
对我来说这很容易,但我必须说:“尽快离开课程”
为自己缓存一些数据没什么不好的,但总的来说,您不会比SQL数据库做得更好
在某些情况下,在填充数据之前需要截断表,但在需要它们时,您肯定会知道这些情况
在这种情况下,当您有一组客户时,您需要将他们全部插入数据库。您可以查询数据库以获取需要更新的客户,更新这些客户并插入其他客户
例如,在mysql数据库中,您可以执行以下操作:
所以,若你们在数据库中有一些唯一的索引,你们可以在一条语句中“插入或更新”它们,甚至可以一次插入多行
当所有(我希望如此)sql数据库允许您一次性(通过事务或“多行插入”)插入它们时,一行接一行地插入代码会让我抓狂
编辑:在多线程中使用HashMaps之前,请阅读一些关于线程安全操作的内容,like here
# 2 楼答案
您可以让另一个线程永久运行,定期检查缓存,并根据您可以配置的间隔参数(例如,每10秒一次)将数据库与缓存同步。 但要注意并发性! 这就是你要找的吗