This repository has been archived on 2024-12-26. You can view files and clone it, but cannot push or open issues or pull requests.
QSeller/src/main/java/ru/redguy/qseller/Database.java
2022-11-15 00:42:00 +03:00

127 lines
4.8 KiB
Java
Executable File

package ru.redguy.qseller;
import com.zaxxer.hikari.HikariDataSource;
import org.bukkit.Material;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
public abstract class Database {
protected static Database instance;
public static Database getInstance() {
return instance;
}
private HikariDataSource ds;
private final String prefix;
protected Database(HikariDataSource ds, String tablePrefix) {
this.ds = ds;
prefix = tablePrefix;
dataBaseCheck();
}
abstract boolean isTableExists(String name, Connection con) throws SQLException;
private void dataBaseCheck() {
try (Connection con = ds.getConnection()) {
if (!isTableExists("OPTIONS", con)) {
PreparedStatement ps = con.prepareStatement("CREATE TABLE " + prefix + "options (option_name text not null,option_value text null);");
ps.execute();
ps = con.prepareStatement("INSERT INTO " + prefix + "options (option_name, option_value) VALUES ('schema_version', '1');");
ps.execute();
}
PreparedStatement ps = con.prepareStatement("SELECT * FROM " + prefix + "options WHERE option_name = 'schema_version';");
ResultSet rs = ps.executeQuery();
rs.next();
String schema_version = rs.getString("option_value");
switch (schema_version) {
case "1": {
if (!isTableExists("players", con)) {
ps = con.prepareStatement("create table " + prefix + "players (uuid text not null,villager_level int default 1 null);");
ps.execute();
}
if (!isTableExists("items", con)) {
ps = con.prepareStatement("create table " + prefix + "items (player text not null,item text not null,sold int default 0 not null);");
ps.execute();
}
break;
}
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public String getPrefix() {
return prefix;
}
public void disconnect() {
this.ds.close();
}
public int getVillagerLevel(UUID uuid) {
try (Connection con = ds.getConnection()) {
PreparedStatement ps = con.prepareStatement("SELECT * FROM " + prefix + "players WHERE uuid = ?");
ps.setString(1, uuid.toString());
ResultSet rs = ps.executeQuery();
if (rs.next()) {
return rs.getInt("villager_level");
}
ps = con.prepareStatement("INSERT INTO " + prefix + "players (uuid) VALUES (?)");
ps.setString(1, uuid.toString());
ps.execute();
return getVillagerLevel(uuid);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return -1;
}
public int getItemProgress(UUID uuid, Material material) {
try (Connection con = ds.getConnection()) {
PreparedStatement ps = con.prepareStatement("SELECT * FROM " + prefix + "items WHERE player = ? AND item = ?");
ps.setString(1, uuid.toString());
ps.setString(2, material.name());
ResultSet rs = ps.executeQuery();
if (rs.next()) {
return rs.getInt("sold");
}
ps = con.prepareStatement("INSERT INTO " + prefix + "items (player, item) VALUES (?, ?)");
ps.setString(1, uuid.toString());
ps.setString(2, material.name());
ps.execute();
return getItemProgress(uuid, material);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return 0;
}
public void progressItem(UUID uuid, Material material) {
try (Connection con = ds.getConnection()) {
PreparedStatement ps = con.prepareStatement("UPDATE " + prefix + "items SET sold = sold+1 WHERE player = ? AND item = ?");
ps.setString(1, uuid.toString());
ps.setString(2, material.name());
ps.execute();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public void progressVillager(UUID uuid) {
try (Connection con = ds.getConnection()) {
PreparedStatement ps = con.prepareStatement("UPDATE " + prefix + "players SET villager_level = villager_level+1 WHERE uuid = ?");
ps.setString(1, uuid.toString());
ps.execute();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}