Ir para conteúdo

[MySQL] Valor antigo + Valor novo


Guest ichy-wayland

Posts Recomendados

Guest ichy-wayland

Então, eu tenho a seguinte query(Ignorem as coisas de java no meio):

 

"INSERT INTO TBL_LIGHTSTATS (name,kills,money) VALUES (" + name + "," + String.valueOf(kills) + "," + money + " ) ON DUPLICATE KEY UPDATE kills=" + String.valueOf(kills) + ", money=" + money + ";"

A minha dúvida é: Como eu faço pra quando ele fizer update da query(Parte do update), kills ser igual ao valor atual + o novo?

Link para o comentário
Compartilhar em outros sites

digamos que temos a void assim e pá:

public String getValue(String value){
    PreparedStatement sql = null;
    String value = null;
    try{
        sql = database.getConnection().prepareStatement("SELECT etc etc etc");
    }catch(Exception e){
    }
    return value;
}

public void insertValue(String value){
    PreparedStatement sql = null;
    try{
        sql = database.getConnection().prepareStatement("INSERT etc etc etc");
    }catch(Exception e){
    }
}

public void updateValue(String value){
    PreparedStatement sql = null;
    try{
        sql = database.getConnection().prepareStatement("UPDATE etc etc etc");
    }catch(Exception e){
    }
}

public void funcao(String value){
    if(getValue(value) == null){
        insertValue(value);
    }else{
        updateValue(value);
    }
}
Editado por kaway
Link para o comentário
Compartilhar em outros sites

é melhor você criar objeto, carregar eles, e quando for salvar, ficará mais fácil...

 

Isso ai vai dar um lag do *** no servidor, dependendo da quantidade de players...

 

...

 

User.java

public class User {
   private UUID uuid;
   private double kills;
   private double deaths;

  public User(UUID uuid, double kills, double deaths) {
    this.uuid = uuid;
    this.kills = kills;
    this.deaths = deaths;
  }

 public void addKill() {
    this.kills++;
  }

  public void addDeath() {
    this.deaths++;
  }

 public double getRatio() {
   return (kills / (kills + death));
 }
}

UserManager.java

 

public class UserManager extends BukkitRunnable implements Listener {

  private List<User> users;

 

  public UserManager() {

    this.users = new ArrayList();

  }

 

  @EventHandler

  public void onPlayerJoin(PlayerJoinEvent event) {

    User user = new User(event.getPlayer().getUniqueId(),"Carregue o valor do banco de dados","O mesmo para esse");

    users.add(user);

  }

 

  @EventHandler

  public void onPlayerQuit.... faça a mesma coisa para os proximos... Use um iterator para remover

 

  @Override

  public void run() {

    for(User user : users) {

      //salve o user no banco de dados

    }

  }

}

 

 

e faça o que você querer...

 

Para ver as estatisticas, você poderia salvar tudo numa string para acessar sem a nescessidade do banco de dados, no entanto, se querer, pode pegar direto do banco de dados...

Link para o comentário
Compartilhar em outros sites

Guest ichy-wayland

Vamos dizer que eu acabei com isso:

 

 

 

SQLThings.java:

package me.magnusbane413.lightstats;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.bukkit.entity.Player;


public class SQLThings {

	private String mysqluser;
	private String mysqlip;
	private String mysqldb;
	private String mysqlpass;
	
	public void SetupSQL() {
		this.mysqluser = Utils.getFieldVal("mysql.user");
		this.mysqlpass = Utils.getFieldVal("mysql.password");
		this.mysqldb = Utils.getFieldVal("mysql.database");
		this.mysqlip = Utils.getFieldVal("mysql.ip");
		try (Connection conn = this.getConnection(); PreparedStatement criarTBL = conn.prepareStatement("CREATE TABLE IF NOT EXISTS TBL_LIGHTSTATS (name VARCHAR(255), kills VARCHAR(255), money VARCHAR(255), PRIMARY KEY (name) );")) {
			criarTBL.executeQuery();
		} catch (SQLException e) {
			Utils.getPlugin().getLogger().severe("There was one errror at MySQL Connection. Check the config.");
		} 
	}
	
	public Connection getConnection() {
		String url = "jdbc:mysql:://" + mysqlip + "/" + mysqldb;
		try {
			return DriverManager.getConnection(url, mysqluser, mysqlpass);
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	public String getData(Player p){
	    PreparedStatement sql = null;
	    String value = null;
	    try(Connection conn = this.getConnection()){
	        sql = conn.prepareStatement("SELECT * FROM TBL_LIGHTSTATS WHERE name=?");
	        sql.setString(1, p.getName());
	        ResultSet rs = sql.executeQuery();
	        value = rs.getString("kills");
	        rs.close();
	        sql.close();
	    }catch(Exception e){
	    }
	    return value;
	}
	
	public void insertData(String name, int kills, String money, Player p){
	    PreparedStatement sql = null;
	    try (Connection conn = this.getConnection()){
	        sql = conn.prepareStatement("INSERT INTO TBL_LIGHTSTATS (name,kills,money) VALUES (?,?,?) ;");
	        sql.setString(1, name);
	        sql.setString(2, String.valueOf(kills + this.getData(p)));
	        sql.setString(3, money);
	        sql.executeQuery();
	        sql.close();
	    }catch(Exception e){
	    }
	}
	
	public void updateData(int kills, String money, Player p) {
		PreparedStatement sql = null;
	    try (Connection conn = getConnection()){
	        sql = conn.prepareStatement("UPDATE TBL_LIGHTSTATS SET kills=?, money=? WHERE name=?");
	        sql.setString(1, String.valueOf(kills + this.getData(p)) );
	        sql.setString(2, money);
	        sql.setString(3, p.getName());
	    }catch(Exception e){
	    }
	}
	
	public void insert(Player p){
	    if(this.getData(p) == null){
	        this.insertData(p.getName(),KillListener.kills.get(p) + Integer.parseInt(this.getData(p)), Utils.getMoney(p), p);
	    }else{
	        updateData(KillListener.kills.get(p) + Integer.parseInt(this.getData(p)), Utils.getMoney(p), p);
	    }
	}
}

KillListener.java

package me.magnusbane413.lightstats;

import java.util.HashMap;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;

public class KillListener implements Listener {
	
	public static HashMap<Player, Integer> kills = new HashMap<Player, Integer>();
	
	public void init() {
		for(Player player : Bukkit.getOnlinePlayers()) {
			kills.put(player, 0);
		}
	}
	
	@EventHandler
	public void onPlayerDeath(PlayerDeathEvent e) {
		kills.put(e.getEntity().getKiller(), kills.get(e.getEntity().getKiller()) + 1);
	}
}

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...