Add cache for database

This commit is contained in:
Данил
2025-05-22 15:52:25 +07:00
parent fd627789c4
commit 3a08578555
@@ -28,12 +28,14 @@ public class DataBase {
private static DataBase instance; private static DataBase instance;
private final Connection connection; private final Connection connection;
private final List<TaskDB> TaskDBList = new ArrayList<>(); private final List<TaskDB> TaskDBList = new ArrayList<>();
private final List<User> DataBaseCache = new ArrayList<>();
private final Timer UpdateDBTimer = new Timer(); private final Timer UpdateDBTimer = new Timer();
public void close() { public void close() {
UpdateDBTimer.cancel(); UpdateDBTimer.cancel();
for (TaskDB i : TaskDBList) for (TaskDB i : TaskDBList)
i.execute(); i.execute();
DataBaseCache.clear();
TaskDBList.clear(); TaskDBList.clear();
try { try {
connection.close(); connection.close();
@@ -56,6 +58,7 @@ public class DataBase {
public void run() { public void run() {
for (TaskDB i : TaskDBList) for (TaskDB i : TaskDBList)
i.execute(); i.execute();
DataBaseCache.clear();
TaskDBList.clear(); TaskDBList.clear();
} }
}, 1_800_000,1_800_000); }, 1_800_000,1_800_000);
@@ -97,6 +100,7 @@ public class DataBase {
saveUser_stmt.setString(2, user.getPassword()); saveUser_stmt.setString(2, user.getPassword());
saveUser_stmt.setString(3, Serialize(user.getTaskList())); saveUser_stmt.setString(3, Serialize(user.getTaskList()));
TaskDBList.add(new TaskDB(saveUser_stmt)); TaskDBList.add(new TaskDB(saveUser_stmt));
DataBaseCache.add(user);
} }
public void UpdateTaskList(User user) throws SQLException { public void UpdateTaskList(User user) throws SQLException {
@@ -107,6 +111,11 @@ public class DataBase {
} }
public User FindUser(String login) throws SQLException { public User FindUser(String login) throws SQLException {
for (User i : DataBaseCache) {
if(i.getLogin().equals(login))
return i;
}
PreparedStatement getUser_stmt = connection.prepareStatement("SELECT * FROM user WHERE login = ?"); PreparedStatement getUser_stmt = connection.prepareStatement("SELECT * FROM user WHERE login = ?");
getUser_stmt.setString(1, login); getUser_stmt.setString(1, login);
ResultSet resultSet = getUser_stmt.executeQuery(); ResultSet resultSet = getUser_stmt.executeQuery();