-
-
Notifications
You must be signed in to change notification settings - Fork 45
Accessing database stats
games647 edited this page May 7, 2015
·
10 revisions
TODO more documentation
I prefer this method as this probably won't change because it's in the Bukkit API.
private PlayerStats getStats(Player player) {
for (MetadataValue metadata : player.getMetadata("player_stats")) {
if (metadata instanceof PlayerStats) {
return (PlayerStats) metadata;
}
}
//not found - pvp stats disabled or not loaded yet
return null;
} private PlayerStats getStatsWithInstance(Player player) {
//returns null if the player isn't loaded yet
return scoreboardstats.getStatsDatabase().getCachedStats(player);
//getStatsDatabase() return null if pvpstats tracking is disabled
} private void doSomething(Player player) {
PlayerStats stats = getStats(player);
stats.getKdr();
stats.getKills();
stats.getKillstreak();
stats.getLastOnline();
//set it to this value
stats.setKills(5);
//just increments it (+ 1)
stats.incrementKills();
} private PlayerStats findByName(String playerName) {
//this is blocking as it starts a sql connection
return scoreboardstats.getDatabase()
.find(PlayerStats.class).where()
.eq("playername", playerName).findUnique();
} private void doWithJDBC() {
EbeanServer database = scoreboardstats.getDatabase();
database.createSqlQuery("SELECT * FROM `player_stats`").findList();
database.createSqlUpdate("DELETE FROM `player_stats`").execute();
//or
String query = "SELECT * FROM `player_stats` WHERE `kills`=?";
Transaction transaction = database.beginTransaction();
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
Connection connection = transaction.getConnection();
statement = connection.prepareStatement(query);
statement.setInt(0, 1);
statement.executeQuery();
resultSet = statement.getResultSet();
//...
transaction.commit();
} catch (SQLException ex) {
yourPlugin.getLogger().log(Level.SEVERE, null, ex);
} finally {
transaction.end();
if (statement != null) {
try {
statement.close();
} catch (SQLException ex) {
yourPlugin.getLogger().log(Level.SEVERE, null, ex);
}
}
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException ex) {
yourPlugin.getLogger().log(Level.SEVERE, null, ex);
}
}
}
}package yourdomain.yourplugin;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.Transaction;
import com.github.games647.scoreboardstats.ScoreboardStats;
import com.github.games647.scoreboardstats.pvpstats.PlayerStats;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.entity.Player;
import org.bukkit.metadata.MetadataValue;
public class DatabaseHook {
private final ScoreboardStats scoreboardstats;
private final YourPlugin yourPlugin;
public DatabaseHook(YourPlugin yourPlugin, ScoreboardStats scoreboardstats) {
this.yourPlugin = yourPlugin;
this.scoreboardstats = scoreboardstats;
}
private PlayerStats getStats(Player player) {
for (MetadataValue metadata : player.getMetadata("player_stats")) {
if (metadata instanceof PlayerStats) {
return (PlayerStats) metadata;
}
}
//not found - pvp stats disabled or not loaded yet
return null;
}
private PlayerStats getStatsWithInstance(Player player) {
//returns null if the player isn't loaded yet
return scoreboardstats.getStatsDatabase().getCachedStats(player);
//getStatsDatabase() can return null if pvpstats tracking is disabled
}
private void doSomething(Player player) {
PlayerStats stats = getStats(player);
stats.getKdr();
stats.getKills();
stats.getKillstreak();
stats.getLastOnline();
//set it to this value
stats.setKills(5);
//just increments it (+ 1)
stats.incrementKills();
}
private PlayerStats loadOfflineAccount(Object uniqueId) {
return scoreboardstats.getStatsDatabase().loadAccount(uniqueId);
}
private Iterable<Map.Entry<String, Integer>> getTop() {
return scoreboardstats.getStatsDatabase().getTop();
}
private PlayerStats findByName(String playerName) {
return scoreboardstats.getDatabase()
.find(PlayerStats.class).where()
.eq("playername", playerName).findUnique();
}
private void doWithJDBC() {
EbeanServer database = scoreboardstats.getDatabase();
database.createSqlQuery("SELECT * FROM `player_stats`").findList();
database.createSqlUpdate("DELETE FROM `player_stats`").execute();
//or
String query = "SELECT * FROM `player_stats` WHERE `kills`=?";
Transaction transaction = database.beginTransaction();
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
Connection connection = transaction.getConnection();
statement = connection.prepareStatement(query);
statement.setInt(1, 15);
statement.executeQuery();
resultSet = statement.getResultSet();
//...
transaction.commit();
} catch (SQLException ex) {
yourPlugin.getLogger().log(Level.SEVERE, null, ex);
} finally {
transaction.end();
if (statement != null) {
try {
statement.close();
} catch (SQLException ex) {
yourPlugin.getLogger().log(Level.SEVERE, null, ex);
}
}
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException ex) {
yourPlugin.getLogger().log(Level.SEVERE, null, ex);
}
}
}
}
}