Guest ichy-wayland Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 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 More sharing options...
??? Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 Pega o Valor atual e soma e depois da Update Link para o comentário Compartilhar em outros sites More sharing options...
Guest ichy-wayland Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 Pega o Valor atual e soma e depois da Update Não teria outro jeito? Pois isso seria meio impratico '-' Link para o comentário Compartilhar em outros sites More sharing options...
??? Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 Não teria outro jeito? Pois isso seria meio impratico '-' Cria uma função pra cada, 1 para INSERT, 1 para UPDATE, 1 para SELECT, ai tu só faz pegar, e somar cara, simples. Link para o comentário Compartilhar em outros sites More sharing options...
Guest ichy-wayland Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 Cria uma função pra cada, 1 para INSERT, 1 para UPDATE, 1 para SELECT, ai tu só faz pegar, e somar cara, simples. Mas e se o valor não tiver nada?? Link para o comentário Compartilhar em outros sites More sharing options...
??? Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 (editado) 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 Outubro 12, 2015 por kaway Link para o comentário Compartilhar em outros sites More sharing options...
Guest ichy-wayland Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 Thanks! ~Podem fechar~ Link para o comentário Compartilhar em outros sites More sharing options...
Manolo8 Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 é 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 More sharing options...
Guest ichy-wayland Postado Outubro 12, 2015 Denunciar Compartilhar Postado Outubro 12, 2015 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 More sharing options...
lucakiksd07 Postado Junho 29, 2019 Denunciar Compartilhar Postado Junho 29, 2019 Seu tópico foi marcado como Inativo. Para reverter esta ação, entre em contato com a equipe de Moderação. OBS: Essa mensagem é automática. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados