Début d'implémentation d'un ORM pour les données des joueurs

This commit is contained in:
2014-12-24 19:33:08 +01:00
parent 452da3bce8
commit 37f8ea1b00
5 changed files with 211 additions and 25 deletions

View File

@@ -0,0 +1,34 @@
package net.mc_pandacraft.java.plugin.pandacraftutils.data_model;
/**
* Représente les données persistante correspondant à un joueur donné sur le serveur
*
* <i>Le nom de cette classe correspond à celle de la table dans la base de donnée,
* d'où la présence d'un <code>_</code>(underscore), qui n'est pas admis en général
* dans le nom d'une classe</i>
* @author Marc Baloup
*
*/
public class PandacraftUtils_Player extends Table {
// TODO Créer la table dans la base de donnée
// TODO Ajouter les champs
@Override
public String[] getValues() {
// TODO Auto-generated method stub
return null;
}
@Override
public String[] getFieldsName() {
// TODO Auto-generated method stub
return null;
}
}

View File

@@ -0,0 +1,123 @@
package net.mc_pandacraft.java.plugin.pandacraftutils.data_model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.commons.lang.StringUtils;
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
import net.mc_pandacraft.java.util.mysql.DBConnection;
public abstract class Table {
DBConnection db = PandacraftUtils.getInstance().databaseConnection;
private boolean saved = false;
// champ relatif aux données
private int id = 0;
public Table() {
}
public void save() {
String tableName = this.getClass().getSimpleName();
try {
Connection conn;
conn = db.getConnection();
String[] fields = getFieldsName(), values = getValues();
if (saved)
{ // mettre à jour les valeurs dans la base
String sql = "";
for (int i=0; i<fields.length && i<values.length; i++)
{
sql += fields[i]+" = ? ";
}
PreparedStatement st = conn.prepareStatement("UPDATE "+tableName+" SET "+sql+" WHERE id="+id);
for (int i=0; i<fields.length && i<values.length; i++)
{
st.setString(i+1, values[i]);
}
st.executeUpdate();
}
else
{ // ajouter dans la base
String concat_vals = "";
String concat_fields = StringUtils.join(fields, ',');
for (int i=0; i<fields.length && i<values.length; i++)
{
if (i!=0) concat_vals += ",";
concat_vals += " ? ";
}
PreparedStatement st = conn.prepareStatement("INSERT INTO "+tableName+" ("+concat_fields+") VALUES ("+concat_vals+")", Statement.RETURN_GENERATED_KEYS);
for (int i=0; i<fields.length && i<values.length; i++)
{
st.setString(i+1, values[i]);
}
id = st.executeUpdate();
saved = true;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete() {
String tableName = this.getClass().getSimpleName();
try {
if (saved)
{ // supprimer la ligne de la base
PreparedStatement st = db.getConnection().prepareStatement("DELETE FROM "+tableName+" WHERE id="+id);
st.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* Récupère la liste des valeurs des champs de la table correspondante, excepté
* le champ <code>id</code>
* @return les valeurs des champs sous la forme de chaine de caractères
*/
public abstract String[] getValues();
/**
* Récupère la liste des noms des champs de la table correspondante, excepté
* le champ <code>id</code>
* @return les noms des champs sous la forme de chaine de caractères
*/
public abstract String[] getFieldsName();
}