有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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并同时将数据插入数据库(可能使用不同的线程)是否会有所改进


共 (2) 个答案

  1. # 1 楼答案

    对我来说这很容易,但我必须说:“尽快离开课程”

    为自己缓存一些数据没什么不好的,但总的来说,您不会比SQL数据库做得更好

    在某些情况下,在填充数据之前需要截断表,但在需要它们时,您肯定会知道这些情况

    在这种情况下,当您有一组客户时,您需要将他们全部插入数据库。您可以查询数据库以获取需要更新的客户,更新这些客户并插入其他客户

    例如,在mysql数据库中,您可以执行以下操作:

    INSERT .. ON DUPLICATE KEY UPDATE ..
    

    所以,若你们在数据库中有一些唯一的索引,你们可以在一条语句中“插入或更新”它们,甚至可以一次插入多行

    当所有(我希望如此)sql数据库允许您一次性(通过事务或“多行插入”)插入它们时,一行接一行地插入代码会让我抓狂

    编辑:在多线程中使用HashMaps之前,请阅读一些关于线程安全操作的内容,like here

  2. # 2 楼答案

    您可以让另一个线程永久运行,定期检查缓存,并根据您可以配置的间隔参数(例如,每10秒一次)将数据库与缓存同步。 但要注意并发性! 这就是你要找的吗