Refactored database access methods

This commit is contained in:
anthorob committed 2021-11-07 00:28:44 -04:00
1 parent 65143eb003
commit 41cb8f4b8f
8 files changed
+52 -159

No files matched your search

@@ -62,9 +62,7 @@ public class MysqlDatabase {
* @param query The SQL query to execute
* @return {@link ResultSet}
*/
public ResultSet query(String query) {
logger.debug("Query: " + query);
protected ResultSet query(String query) {
Statement stmt;
try {
stmt = connection.createStatement();
@@ -84,7 +82,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query
* @return an integer of how many row were affected
*/
public synchronized int update(String sql, Object... params) {
protected synchronized int update(String sql, Object... params) {
return executeUpdate(sql, params);
}
@@ -96,7 +94,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query
* @return an integer of how many row were affected
*/
public synchronized int insert(String sql, Object... params) {
protected synchronized int insert(String sql, Object... params) {
return executeUpdate(sql, params);
}
@@ -108,7 +106,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query
* @return an integer of how many row were affected
*/
public synchronized int delete(String sql, Object... params) {
protected synchronized int delete(String sql, Object... params) {
return executeUpdate(sql, params);
}
@@ -139,7 +137,7 @@ public class MysqlDatabase {
* @param params The parameters to include in the query
* @return a ResultSet object, which can be converted to a model using {@link MysqlDatabase#convertToTableModel(ResultSet)}
*/
public synchronized ResultSet prepareAndExecute(String sql, Object... params) {
protected synchronized ResultSet prepareAndExecute(String sql, Object... params) {
try {
PreparedStatement query = connection.prepareStatement(sql);
@@ -212,7 +210,7 @@ public class MysqlDatabase {
* @throws SQLException
*/
public void close() throws SQLException {
logger.info("Closing database...");
System.out.println("Closing database...");
connection.close();
}
@@ -250,8 +248,9 @@ public class MysqlDatabase {
* @param rs The ResultSet returned by the SELECT query
* @return a {@link MTableModel} with the appropriate column and rows
*/
public static MTableModel convertToTableModel(ResultSet rs, String tableName) {
protected static MTableModel convertToTableModel(ResultSet rs, String tableName) {
MTableModel table = new MTableModel();
table.setName(tableName);
try {
ResultSetMetaData metadata = rs.getMetaData();
@@ -275,33 +274,4 @@ public class MysqlDatabase {
return table;
}
/**
* @param rs The ResultSet returned by the SELECT query
* @return a {@link MTableModel} with the appropriate column and rows
*/
public static MTableModel convertToTableModel(ResultSet rs) {
MTableModel table = new MTableModel();
try {
ResultSetMetaData metadata = rs.getMetaData();
for (int i = 1; i < metadata.getColumnCount() + 1; i++) {
table.addColumn(metadata.getColumnName(i));
}
while (rs.next()) {
MRowModel row = new MRowModel();
for (int i = 0; i < metadata.getColumnCount(); i++) {
row.addColumnToRow(rs.getObject(i + 1));
}
table.addRow(row);
}
} catch (SQLException e) {
e.printStackTrace();
}
return table;
}
}
@@ -5,11 +5,16 @@ package netneutrality.db.controllers;/*
* https://discord.gg/CdFcyQ
*/
import net.dv8tion.jda.api.entities.Guild;
import netneutrality.db.AbstractController;
public class DBGuild extends AbstractController {
public void insertGuildInDB(Guild g) {
if (!database.exists("guilds", "guild_id", g.getId())) {
database.prepareAndExecuteAsync("INSERT INTO guilds VALUES(?, ?, ?)", g.getId(), "0", null).blocking();
}
}
@Override
public String getControllerName() {
@@ -13,6 +13,7 @@ import netneutrality.MusicBot;
import netneutrality.ThreadManager;
import netneutrality.db.AbstractController;
import netneutrality.db.DBController;
import netneutrality.db.models.MTableModel;
import netneutrality.handler.LogHandler;
import java.sql.ResultSet;
@@ -21,27 +22,9 @@ import java.util.function.Consumer;
public class DBLogging extends AbstractController {
public void logGuild(Guild g) {
ThreadManager.getExecutor("db-action").submit(() -> {
if (!database.exists("guilds", "guild_id", g.getId())) {
database.insert("INSERT INTO guilds VALUES(?, ?, ?)", g.getId(), g.getName(), g.getOwner().getUser().getName());
}
});
}
public void getLoggingChannel(String serverId, Consumer<TextChannel> success) {
ThreadManager.getExecutor("db-action").submit(() -> {
TextChannel txt = null;
ResultSet rs = database.prepareAndExecute("SELECT channelId FROM logging WHERE serverId = ?", serverId);
try {
if (rs.next()) {
txt = MusicBot.getJDA().getGuildById(serverId).getTextChannelById(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
database.prepareAndExecuteAsync("SELECT channelId FROM logging WHERE serverId = ?", serverId).async((table) -> {
TextChannel txt = MusicBot.getJDA().getGuildById(serverId).getTextChannelById((String) table.getRow(0).get(0));
success.accept(txt);
});
@@ -49,26 +32,17 @@ public class DBLogging extends AbstractController {
}
public void setupLog(String serverId, String channelId) {
database.insert("INSERT INTO logging VALUES(?,?,?)", serverId, channelId, true);
database.prepareAndExecuteAsync("INSERT INTO logging VALUES(?,?,?)", serverId, channelId, true).blocking();
}
public void toggleLog(String serverId, String channelId) {
database.update("UPDATE logging SET enabled = NOT enabled");
database.prepareAndExecuteAsync("UPDATE logging SET enabled = NOT enabled WHERE serverId = ? AND channelId = ?", serverId, channelId).blocking();
}
public boolean isLoggingEnabled(String serverId, String channelId) {
MTableModel table = database.prepareAndExecuteAsync("SELECT enabled FROM logging WHERE serverId = ? AND channelId = ?", serverId, channelId).blocking();
try {
ResultSet rs = database.prepareAndExecute("SELECT enabled FROM logging WHERE serverId = ? AND channelId = ?", serverId, channelId);
if (rs.next()) {
return rs.getBoolean(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
return Boolean.parseBoolean((String) table.getRow(0).get(0));
}
@Override
@@ -36,15 +36,14 @@ public class DBMessage extends AbstractController {
}
public void log(Guild guild, TextChannel channel, User author, Message message) {
String servername = guild.getId();
String channelname = channel.getName();
String username = author.getName();
String serverid = guild.getId();
String channelid = channel.getId();
String userid = author.getId();
String datesent = message.getTimeCreated().format(DateTimeFormatter.ofPattern(Settings.getInstance().DATETIMEFORMAT));
String messageid = message.getId();
String msg = message.getContentRaw().trim();
database.prepareAndExecuteAsync("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", servername, channelname, username, datesent, messageid, msg, null).async();
database.prepareAndExecuteAsync("INSERT INTO log_message VALUES(?,?,?,?,?,?,?)", serverid, channelid, userid, datesent, messageid, msg, null).async();
}
public void logEdit(String messageId, String newMessage) {
@@ -53,18 +52,16 @@ public class DBMessage extends AbstractController {
}
public MMessage getMessage(String messageId) {
ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE messageId = ?", messageId);
MTableModel table = MysqlDatabase.convertToTableModel(rs);
MTableModel table = database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE messageId = ?", messageId).blocking();
if (table.getNbRows() > 0) {
return new MMessage(table.getRowModel(0));
}
return null;
}
public void getMessagesFromUser(String username, String serverName, int max, Consumer<ArrayList<MMessage>> success) {
database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE userName = ? AND serverName = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max).async(table -> {
database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE userId = ? AND serverId = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max).async(table -> {
ArrayList<MMessage> messages = new ArrayList<>();
if (table.getNbRows() > 0) {
@@ -82,32 +79,20 @@ public class DBMessage extends AbstractController {
public ArrayList<MMessage> getMessagesFromUser(String username, String serverName, int max) {
ArrayList<MMessage> messages = new ArrayList<>();
ResultSet rs = database.prepareAndExecute("SELECT * FROM log_message WHERE userName = ? AND serverName = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max);
MTableModel table = MysqlDatabase.convertToTableModel(rs);
MTableModel table = database.prepareAndExecuteAsync("SELECT * FROM log_message WHERE userId = ? AND serverId = ? ORDER BY dateSent DESC LIMIT ?", username, serverName, max).blocking();;
if (table.getNbRows() > 0) {
for (int row = 0; row < max; row++) {
messages.add(new MMessage(table.getRowModel(row)));
}
}
return messages;
}
public String getMessageString(String messageId) {
MTableModel table = database.prepareAndExecuteAsync("SELECT message FROM log_message WHERE messageId = ?", messageId).blocking();
try {
ResultSet rs = database.prepareAndExecute("SELECT message FROM log_message WHERE messageId = ?", messageId);
if (rs.next()) {
return rs.getString(1);
}
} catch (SQLException e) {
logger.error(e.getMessage());
LogHandler.log(e);
}
return "No message found";
return (String) table.getRowModel(0).getItem(0);
}
@@ -2,27 +2,16 @@ package netneutrality.db.models;
public class MMessage {
private String serverName;
private String channelName;
private String sender;
private String dateSent;
private String messageId;
private String message;
private String editedMessage;
public MMessage(String serverName, String channelName, String sender, String dateSent, String messageId,
String message) {
this.serverName = serverName;
this.channelName = channelName;
this.sender = sender;
this.dateSent = dateSent;
this.messageId = messageId;
this.message = message;
this.editedMessage = "";
}
private final String serverId;
private final String channelName;
private final String sender;
private final String dateSent;
private final String messageId;
private final String message;
private final String editedMessage;
public MMessage(MRowModel row) {
this.serverName = (String) row.getItem(0);
this.serverId = (String) row.getItem(0);
this.channelName = (String) row.getItem(1);
this.sender = (String) row.getItem(2);
this.dateSent = (String) row.getItem(3);
@@ -31,75 +20,37 @@ public class MMessage {
this.editedMessage = "";
}
public MMessage(Object serverName, Object channelName, Object sender, Object dateSent, Object messageId, Object message) {
this.serverName = (String) serverName;
this.channelName = (String) channelName;
this.sender = (String) sender;
this.dateSent = (String) dateSent;
this.messageId = (String) messageId;
this.message = (String) message;
this.editedMessage = "";
}
public String getServerName() {
return serverName;
}
public void setServerName(String serverName) {
this.serverName = serverName;
public String getServerId() {
return serverId;
}
public String getChannelName() {
return channelName;
}
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getDateSent() {
return dateSent;
}
public void setDateSent(String dateSent) {
this.dateSent = dateSent;
}
public String getMessageId() {
return messageId;
}
public void setMessageId(String messageId) {
this.messageId = messageId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getEditedMessage() {
return editedMessage;
}
public void setEditedMessage(String editedMessage) {
this.editedMessage = editedMessage;
}
@Override
public String toString() {
return "MMessage [serverName=" + serverName + ", channelName=" + channelName + ", sender=" + sender
return "MMessage [serverName=" + serverId + ", channelName=" + channelName + ", sender=" + sender
+ ", dateSent=" + dateSent + ", messageId=" + messageId + ", message=" + message + ", editedMessage="
+ editedMessage + "]";
}
@@ -9,6 +9,7 @@ import netneutrality.db.DBController;
import netneutrality.db.MysqlDatabase;
import netneutrality.db.controllers.DBMessage;
import netneutrality.db.controllers.DBSettings;
import netneutrality.db.models.MTableModel;
public class EditHandler extends ListenerAdapter {
@@ -17,7 +18,9 @@ public class EditHandler extends ListenerAdapter {
if (event.getAuthor().isBot()) return;
Object logChannel = MysqlDatabase.convertToTableModel(DBController.get().prepareAndExecute("SELECT channelId FROM logging WHERE serverId = ? AND enabled = 1", event.getGuild().getId())).getRowModel(0).getItem(0);
MTableModel table = DBController.get().prepareAndExecuteAsync("SELECT channelId FROM logging WHERE serverId = ? AND enabled = 1", event.getGuild().getId()).blocking();
Object logChannel = table.getRowModel(0).getItem(0);
if (logChannel != null) {
String originalMessage = ((DBMessage) DBController.get("message")).getMessageString(event.getMessage().getId());
((DBMessage) DBController.get("message")).logEdit(event.getMessage().getId(), event.getMessage().getContentDisplay());
@@ -50,6 +50,7 @@ public class NewCommandListener extends ListenerAdapter {
if (msg.startsWith(Settings.getInstance().get("BOT_PREFIX", "$"))) {
msg = msg.substring(Settings.getInstance().get("BOT_PREFIX", "$").length());
String cmd = msg.split(" ", 2)[0];
String[] args = msg.replaceFirst("(" + cmd + ")( )?", "").split(" ");
if (CommandManager.commands.containsKey(cmd) || CommandManager.commandsAlias.containsKey(cmd)) {
@@ -62,7 +63,7 @@ public class NewCommandListener extends ListenerAdapter {
}
}
c.execute(event, msg.replaceFirst("(" + cmd + ")( )?", ""));
c.execute(event, args);
}
}
} else {
@@ -9,13 +9,17 @@ package netneutrality.handler;
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import netneutrality.db.DBController;
import netneutrality.db.controllers.DBGuild;
import org.jetbrains.annotations.NotNull;
public class ServerJoinHandler extends ListenerAdapter {
@Override
public void onGuildJoin(@NotNull GuildJoinEvent event){
if (!DBController.get().exists("guilds", "guild_id", event.getGuild().getId())) {
((DBGuild) DBController.get("guild")).insertGuildInDB(event.getGuild());
}
}