10 changed files with 264 additions and 1 deletions
@ -0,0 +1,18 @@
|
||||
package org.leolo.nrdatad.db; |
||||
|
||||
import java.sql.Connection; |
||||
import java.sql.SQLException; |
||||
|
||||
public abstract class BaseDao { |
||||
|
||||
private DatabaseManager manager; |
||||
|
||||
public BaseDao(DatabaseManager manager){ |
||||
this.manager = manager; |
||||
} |
||||
|
||||
protected Connection getConnection() throws SQLException{ |
||||
return manager.getConnection(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,42 @@
|
||||
package org.leolo.nrdatad.db; |
||||
|
||||
import org.apache.logging.log4j.LogManager; |
||||
import org.apache.logging.log4j.Logger; |
||||
import org.jetbrains.annotations.NotNull; |
||||
import org.leolo.nrdatad.ConfigurationManager; |
||||
|
||||
import java.sql.Connection; |
||||
import java.sql.PreparedStatement; |
||||
import java.sql.SQLException; |
||||
import java.util.Set; |
||||
import java.util.function.BiConsumer; |
||||
|
||||
public abstract class MetadataDao extends BaseDao { |
||||
|
||||
Logger log = LogManager.getLogger(); |
||||
|
||||
public MetadataDao(DatabaseManager manager){ |
||||
super(manager); |
||||
} |
||||
|
||||
public abstract String getMetadata(String key, String defaultValue) throws SQLException; |
||||
|
||||
public String getMetadata(String key) throws SQLException{ |
||||
return getMetadata(key, null); |
||||
} |
||||
|
||||
public abstract void updateMetadata(String key, @NotNull String value) throws SQLException; |
||||
|
||||
public abstract Set<String> getKeys() throws SQLException; |
||||
|
||||
public abstract void forEach(BiConsumer<String, String> action) throws SQLException; |
||||
|
||||
public boolean containsKey(String key) throws SQLException{ |
||||
return getKeys().contains(key); |
||||
} |
||||
|
||||
public int entryCount() throws SQLException{ |
||||
return getKeys().size(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,116 @@
|
||||
package org.leolo.nrdatad.db.mariadb; |
||||
|
||||
import org.jetbrains.annotations.NotNull; |
||||
|
||||
import java.sql.*; |
||||
import java.util.HashSet; |
||||
import java.util.Set; |
||||
import java.util.TreeMap; |
||||
import java.util.function.BiConsumer; |
||||
|
||||
public class MetadataDao extends org.leolo.nrdatad.db.MetadataDao { |
||||
|
||||
private static Object SYNC_TOKEN = new Object(); |
||||
|
||||
public MetadataDao(DatabaseManager manager){ |
||||
super(manager); |
||||
} |
||||
|
||||
@Override |
||||
public String getMetadata(String key, String defaultValue) throws SQLException { |
||||
try( |
||||
Connection conn = getConnection(); |
||||
PreparedStatement pstmt = conn.prepareStatement("SELECT value FROM metadata WHERE `key` = ?") |
||||
){ |
||||
pstmt.setString(1, key); |
||||
try(ResultSet rs = pstmt.executeQuery()){ |
||||
if(rs.next()){ |
||||
return rs.getString(1); |
||||
} |
||||
} |
||||
} |
||||
return defaultValue; |
||||
} |
||||
|
||||
@Override |
||||
public void updateMetadata(@NotNull String key, @NotNull String value) throws SQLException { |
||||
synchronized (SYNC_TOKEN) { |
||||
if (containsKey(key)) { |
||||
try( |
||||
Connection conn = getConnection(); |
||||
PreparedStatement pstmt = conn.prepareStatement("UPDATE metadata SET value = ? WHERE `key` = ?") |
||||
){ |
||||
pstmt.setString(1, value); |
||||
pstmt.setString(2, key); |
||||
pstmt.executeUpdate(); |
||||
} |
||||
} else { |
||||
try( |
||||
Connection conn = getConnection(); |
||||
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO metadata (`key`, value) VALUES (?,?)") |
||||
){ |
||||
pstmt.setString(1, key); |
||||
pstmt.setString(2, value); |
||||
pstmt.executeUpdate(); |
||||
|
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public Set<String> getKeys() throws SQLException { |
||||
HashSet<String> set = new HashSet<>(); |
||||
try( |
||||
Connection conn = getConnection(); |
||||
Statement stmt = conn.createStatement(); |
||||
ResultSet rs = stmt.executeQuery("SELECT `key` FROM metadata") |
||||
){ |
||||
while(rs.next()){ |
||||
set.add(rs.getString(1)); |
||||
} |
||||
} |
||||
return set; |
||||
} |
||||
|
||||
@Override |
||||
public void forEach(BiConsumer<String, String> action) throws SQLException { |
||||
TreeMap<String, String> map = new TreeMap<>(); |
||||
try( |
||||
Connection conn = getConnection(); |
||||
Statement stmt = conn.createStatement(); |
||||
ResultSet rs = stmt.executeQuery("SELECT `key`, value FROM metadata") |
||||
){ |
||||
while(rs.next()){ |
||||
map.put(rs.getString(1), rs.getString(2)); |
||||
} |
||||
} |
||||
map.forEach(action); |
||||
} |
||||
|
||||
@Override |
||||
public boolean containsKey(String key) throws SQLException { |
||||
try( |
||||
Connection conn = getConnection(); |
||||
PreparedStatement pstmt = conn.prepareStatement("SELECT 1 FROM metadata WHERE `key` = ?") |
||||
){ |
||||
pstmt.setString(1, key); |
||||
try(ResultSet rs = pstmt.executeQuery()){ |
||||
return rs.next(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public int entryCount() throws SQLException { |
||||
try( |
||||
Connection conn = getConnection(); |
||||
Statement stmt = conn.createStatement(); |
||||
ResultSet rs = stmt.executeQuery("SELECT COUNT(1) FROM metadata") |
||||
){ |
||||
rs.next(); |
||||
return rs.getInt(1); |
||||
} |
||||
} |
||||
} |
||||
@ -1,8 +1,28 @@
|
||||
package org.leolo.nrdatad.db.test; |
||||
|
||||
public class DatabaseManager { |
||||
import org.leolo.nrdatad.db.MetadataDao; |
||||
|
||||
import java.sql.Connection; |
||||
import java.sql.SQLException; |
||||
|
||||
public class DatabaseManager implements org.leolo.nrdatad.db.DatabaseManager { |
||||
|
||||
public void initPool() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public boolean checkConnection() { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public Connection getConnection() throws SQLException { |
||||
throw new RuntimeException("Function not supported by stub"); |
||||
} |
||||
|
||||
@Override |
||||
public MetadataDao getMetadataDao() { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
@ -0,0 +1,40 @@
|
||||
package org.leolo.nrdatad.db.test; |
||||
|
||||
import org.jetbrains.annotations.NotNull; |
||||
import org.leolo.nrdatad.db.DatabaseManager; |
||||
|
||||
import java.sql.SQLException; |
||||
import java.util.HashMap; |
||||
import java.util.Set; |
||||
import java.util.function.BiConsumer; |
||||
|
||||
public class MetadataDao extends org.leolo.nrdatad.db.MetadataDao { |
||||
|
||||
private HashMap<String, String> dataMap = new HashMap<>(); |
||||
|
||||
public MetadataDao(DatabaseManager manager) { |
||||
super(manager); |
||||
} |
||||
|
||||
@Override |
||||
public String getMetadata(String key, String defaultValue) throws SQLException { |
||||
if(dataMap.containsKey(key)) |
||||
return dataMap.get(key); |
||||
return defaultValue; |
||||
} |
||||
|
||||
@Override |
||||
public void updateMetadata(String key, @NotNull String value) throws SQLException { |
||||
dataMap.put(key, value); |
||||
} |
||||
|
||||
@Override |
||||
public Set<String> getKeys() throws SQLException { |
||||
return dataMap.keySet(); |
||||
} |
||||
|
||||
@Override |
||||
public void forEach(BiConsumer<String, String> action) throws SQLException { |
||||
dataMap.forEach(action); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue