127 lines
4.8 KiB
Java
Executable File
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();
|
|
}
|
|
}
|
|
}
|