Все ДАО получили перезагруженный метод для того что бы вызываться с передачей соединения и без передачи соединия
This commit is contained in:
AidarKC
2025-12-18 15:58:43 +03:00
parent 1b1da19d3d
commit d6d2bfeb73
6 changed files with 250 additions and 127 deletions
@@ -17,6 +17,10 @@ import java.util.List;
* - loginKey TEXT
* - deviceKey TEXT
* - bchLimit INTEGER (может быть NULL)
*
* * Правило:
* * - методы с Connection НЕ закрывают соединение
* * - методы без Connection сами открывают и закрывают соединение
*/
public final class SolanaUsersDAO {
@@ -28,23 +32,22 @@ public final class SolanaUsersDAO {
public static SolanaUsersDAO getInstance() {
if (instance == null) {
synchronized (SolanaUsersDAO.class) {
if (instance == null) {
instance = new SolanaUsersDAO();
}
if (instance == null) instance = new SolanaUsersDAO();
}
}
return instance;
}
public void insert(SolanaUserEntry user) throws SQLException {
// -------------------- INSERT --------------------
/** Вставка с внешним соединением. Соединение НЕ закрывает. */
public void insert(Connection c, SolanaUserEntry user) throws SQLException {
String sql = """
INSERT INTO solana_users (login, loginId, bchId, loginKey, deviceKey, bchLimit)
VALUES (?, ?, ?, ?, ?, ?)
""";
try (Connection c = db.getConnection();
PreparedStatement ps = c.prepareStatement(sql)) {
try (PreparedStatement ps = c.prepareStatement(sql)) {
ps.setString(1, user.getLogin());
ps.setLong(2, user.getLoginId());
ps.setLong(3, user.getBchId());
@@ -61,16 +64,24 @@ public final class SolanaUsersDAO {
}
}
public SolanaUserEntry getByLoginId(long loginId) throws SQLException {
/** Вставка без внешнего соединения. Сам открывает/закрывает. */
public void insert(SolanaUserEntry user) throws SQLException {
try (Connection c = db.getConnection()) {
insert(c, user);
}
}
// -------------------- SELECT --------------------
/** Получить по loginId с внешним соединением. Соединение НЕ закрывает. */
public SolanaUserEntry getByLoginId(Connection c, long loginId) throws SQLException {
String sql = """
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
FROM solana_users
WHERE loginId = ?
""";
try (Connection c = db.getConnection();
PreparedStatement ps = c.prepareStatement(sql)) {
try (PreparedStatement ps = c.prepareStatement(sql)) {
ps.setLong(1, loginId);
try (ResultSet rs = ps.executeQuery()) {
if (!rs.next()) return null;
@@ -79,13 +90,20 @@ public final class SolanaUsersDAO {
}
}
// добавь рядом со старым методом
/** Получить по loginId без внешнего соединения. Сам открывает/закрывает. */
public SolanaUserEntry getByLoginId(long loginId) throws SQLException {
try (Connection c = db.getConnection()) {
return getByLoginId(c, loginId);
}
}
/** Получить по login (case-insensitive) с внешним соединением. Соединение НЕ закрывает. */
public SolanaUserEntry getByLogin(Connection c, String login) throws SQLException {
String sql = """
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
FROM solana_users
WHERE LOWER(login) = LOWER(?)
""";
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
FROM solana_users
WHERE LOWER(login) = LOWER(?)
""";
try (PreparedStatement ps = c.prepareStatement(sql)) {
ps.setString(1, login);
@@ -96,25 +114,15 @@ public final class SolanaUsersDAO {
}
}
/** Получить по login (case-insensitive) без внешнего соединения. Сам открывает/закрывает. */
public SolanaUserEntry getByLogin(String login) throws SQLException {
String sql = """
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
FROM solana_users
WHERE LOWER(login) = LOWER(?)
""";
try (Connection c = db.getConnection();
PreparedStatement ps = c.prepareStatement(sql)) {
ps.setString(1, login);
try (ResultSet rs = ps.executeQuery()) {
if (!rs.next()) return null;
return mapRow(rs);
}
try (Connection c = db.getConnection()) {
return getByLogin(c, login);
}
}
public List<SolanaUserEntry> searchByLoginPrefix(String prefix) throws SQLException {
/** Поиск по префиксу с внешним соединением. Соединение НЕ закрывает. */
public List<SolanaUserEntry> searchByLoginPrefix(Connection c, String prefix) throws SQLException {
String sql = """
SELECT login, loginId, bchId, loginKey, deviceKey, bchLimit
FROM solana_users
@@ -125,9 +133,7 @@ public final class SolanaUsersDAO {
List<SolanaUserEntry> result = new ArrayList<>();
try (Connection c = db.getConnection();
PreparedStatement ps = c.prepareStatement(sql)) {
try (PreparedStatement ps = c.prepareStatement(sql)) {
ps.setString(1, prefix.toLowerCase() + "%");
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) result.add(mapRow(rs));
@@ -137,6 +143,15 @@ public final class SolanaUsersDAO {
return result;
}
/** Поиск по префиксу без внешнего соединения. Сам открывает/закрывает. */
public List<SolanaUserEntry> searchByLoginPrefix(String prefix) throws SQLException {
try (Connection c = db.getConnection()) {
return searchByLoginPrefix(c, prefix);
}
}
// -------------------- MAPPER --------------------
private SolanaUserEntry mapRow(ResultSet rs) throws SQLException {
return new SolanaUserEntry(
rs.getLong("loginId"),