Ir para conteúdo
  • 0

[Resolvido] duvida sql


jetta

Pergunta

eu tenho minha tabela tudo certinho, porem quando eu dou um um insert esse ultimo insert sobrepoe os valores anteriores, não sei porque isso ta ocorrendo

 

sql criar table:

CREATE TABLE IF NOT EXISTS clans (id INTEGER NOT NULL auto_increment, tag VARCHAR(25) UNIQUE, raw_tag VARCHAR(25), name VARCHAR(25), friendly_fire BOOLEAN, founded BIGINT, bank DECIMAL)

sql insert:

INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

 

eu tenho minha tabela tudo certinho, porem quando eu dou um um insert esse ultimo insert sobrepoe os valores anteriores, não sei porque isso ta ocorrendo

 

sql criar table:

CREATE TABLE IF NOT EXISTS clans (id INTEGER NOT NULL auto_increment, tag VARCHAR(25) UNIQUE, raw_tag VARCHAR(25), name VARCHAR(25), friendly_fire BOOLEAN, founded BIGINT, bank DECIMAL)

sql insert:

INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)

INSERT OR IGNORE serve pra q?

Fui dar uma pesquisada e vi que INSERT OR IGNORE, da uns bugs legauzi, tipo remontar o valor anterior ;-;

tenta só INSERT INTO...

coloca PRIMARY KEY no id...

 

http://www.w3schools.com/sql/sql_insert.asp

http://www.w3schools.com/sql/sql_autoincrement.asp

 

se nao for ai desisto '-'

Link para o comentário
Compartilhar em outros sites

INSERT OR IGNORE serve pra q?

Fui dar uma pesquisada e vi que INSERT OR IGNORE, da uns bugs legauzi, tipo remontar o valor anterior ;-;

tenta só INSERT INTO...

coloca PRIMARY KEY no id...

 

http://www.w3schools.com/sql/sql_insert.asp

http://www.w3schools.com/sql/sql_autoincrement.asp

 

se nao for ai desisto '-'

 
deu esse erro:
java.sql.SQLException: [SQLITE_CONSTRAINT]  Abort due to constraint violation (column tag is not unique)

sql pra criar a tabela:

CREATE TABLE IF NOT EXISTS clans (id INTEGER PRIMARY KEY   AUTOINCREMENT PRIMARY KEY, tag VARCHAR(25) UNIQUE, raw_tag VARCHAR(25), name VARCHAR(25), friendly_fire INTEGER, founded REAL, bank DECIMAL)
Link para o comentário
Compartilhar em outros sites

 

eu tenho minha tabela tudo certinho, porem quando eu dou um um insert esse ultimo insert sobrepoe os valores anteriores, não sei porque isso ta ocorrendo

 

sql criar table:

CREATE TABLE IF NOT EXISTS clans (id INTEGER NOT NULL auto_increment, tag VARCHAR(25) UNIQUE, raw_tag VARCHAR(25), name VARCHAR(25), friendly_fire BOOLEAN, founded BIGINT, bank DECIMAL)

sql insert:

INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)

O meu antigamente eu fazia assim e funcionava :

"INSERT INTO topkills (jogador,kills,mortes) VALUES ('" + player + "', '"+ i +"', '"+ i +"')"
Link para o comentário
Compartilhar em outros sites


INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)

correto seria:


PreparedStatement pstmt = this.connection.prepareStatement("INSERT INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?);

Adicionais:


pstmt.setString(1, tag);

/* Assim por diante cara, você ia criando com cada 1 aumentando 1 número e no final usa*/

pstmt.execute();

pstmt.close();

this.connection.close();

}

catch (SQLException e)

{

e.printStackTrace();

}

catch (ClassNotFoundException e)

{

e.printStackTrace();

}

}

/* Obs: Caso vá utilizar ints, decimais etc... Modifique o seu pstmt para o que você quer*/

Espero ter ajudado....

 

Link para o comentário
Compartilhar em outros sites

INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)

correto seria:

PreparedStatement pstmt = this.connection.prepareStatement("INSERT INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?);

Adicionais:

pstmt.setString(1, tag); 
/* Assim por diante cara, você ia criando com cada 1 aumentando 1 número e no final usa*/
      pstmt.execute();
      pstmt.close();
      this.connection.close();
    }
    catch (SQLException e)
    {
      e.printStackTrace();
    }
    catch (ClassNotFoundException e)
    {
      e.printStackTrace();
    }
  }
/* Obs: Caso vá utilizar ints, decimais etc... Modifique o seu pstmt para o que você quer*/

Espero ter ajudado....

 

 

eu to usando assim...

criando a tabela:

stmt.execute("CREATE TABLE IF NOT EXISTS `clans` (`id` bigint(20), `tag` varchar(25) NOT NULL, `raw_tag` varchar(25) NOT NULL, `name` varchar(25) NOT NULL, `friendly_fire` int(11) NOT NULL,`founded` bigint NOT NULL, `bank` double(64,2) NOT NULL, PRIMARY KEY  (`id`));");

dando insert:

PreparedStatement stmt = connection.prepareStatement("INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)");
stmt.setString(1, clan.getTag());
stmt.setString(2, clan.getRawTag());
stmt.setString(3, clan.getName());
stmt.setInt(4, clan.isFriendlyFire() ? 1 : 0);
stmt.setLong(5, clan.getFounded());
stmt.setDouble(6, clan.getBank());
stmt.execute();

quando eu dou o primeiro insert vai tudo certinho, já no segundo insert os valores do primeiro somem e ele é duplicado

Link para o comentário
Compartilhar em outros sites

stmt.execute("CREATE TABLE IF NOT EXISTS `clans` (`id` INTEGER AUTO_INCREMMENT, `tag` varchar(25) NOT NULL, `raw_tag` varchar(25) NOT NULL, `name` varchar(25) NOT NULL, `friendly_fire` BOOLEAN DEFAULT FALSE,`founded` bigint NOT NULL, `bank` double(64,2) NOT NULL, PRIMARY KEY (`id`));");

PreparedStatement stmt = connection.prepareStatement("INSERT INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)");

stmt.setString(1, clan.getTag());

stmt.setString(2, clan.getRawTag());

stmt.setString(3, clan.getName());

stmt.setBoolean(4, clan.isFriendlyFire());

stmt.setLong(5, clan.getFounded());

stmt.setDouble(6, clan.getBank());

stmt.executeUpdate();

Link para o comentário
Compartilhar em outros sites

 

eu to usando assim...

criando a tabela:

stmt.execute("CREATE TABLE IF NOT EXISTS `clans` (`id` bigint(20), `tag` varchar(25) NOT NULL, `raw_tag` varchar(25) NOT NULL, `name` varchar(25) NOT NULL, `friendly_fire` int(11) NOT NULL,`founded` bigint NOT NULL, `bank` double(64,2) NOT NULL, PRIMARY KEY  (`id`));");

dando insert:

PreparedStatement stmt = connection.prepareStatement("INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)");
stmt.setString(1, clan.getTag());
stmt.setString(2, clan.getRawTag());
stmt.setString(3, clan.getName());
stmt.setInt(4, clan.isFriendlyFire() ? 1 : 0);
stmt.setLong(5, clan.getFounded());
stmt.setDouble(6, clan.getBank());
stmt.execute();

quando eu dou o primeiro insert vai tudo certinho, já no segundo insert os valores do primeiro somem e ele é duplicado

 

Não é necessário utilizar `isso` apenas isso. Para criar a tabela você deve usar o mesmo estilo de método exemplo:

 public Database(String user, String password, String database, String host)
  {
    startDatabase();
  }
  
  private void startDatabase()
  {
    try
    {
      Class.forName("com.mysql.jdbc.Driver");
      this.connection = DriverManager.getConnection("jdbc:mysql://" + "HOST" + "/" + "DATABASE", "NOME", "SENHA");
      Statement stmt = this.connection.createStatement();
      stmt.execute("CREATE TABLE IF NOT EXISTS clans (id bigint(20), tag varchar(25) NOT NULL, raw_tag varchar(25) NOT NULL, name varchar(25) NOT NULL, friendly_fire int(11) NOT NULL, founded bigint NOT NULL, bank double(64,2) NOT NULL, PRIMARY KEY  (id));");
      stmt.close();
      this.connection.close();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
  /* Aqui em baixo usa o método que eu te passei no caso, no caso com um exemplo seria: */
  
  public void teste(String player, int numero, String blabla, String blabla1)
  {
    try
    {
	/* Isso seria o começo do código, ou seja o public void, um try, seu código o printStackTrace, depois o catch */
Link para o comentário
Compartilhar em outros sites

 

eu tenho minha tabela tudo certinho, porem quando eu dou um um insert esse ultimo insert sobrepoe os valores anteriores, não sei porque isso ta ocorrendo

 

sql criar table:

CREATE TABLE IF NOT EXISTS clans (id INTEGER NOT NULL auto_increment, tag VARCHAR(25) UNIQUE, raw_tag VARCHAR(25), name VARCHAR(25), friendly_fire BOOLEAN, founded BIGINT, bank DECIMAL)

sql insert:

INSERT OR IGNORE INTO clans (tag, raw_tag, name, friendly_fire, founded, bank) VALUES (?, ?, ?, ?, ?, ?)

 

Eu tinha o mesmo problema então que meu amigo passou a api dele pra min usar e eu dei algumas modificadas:

 

 

Essa aqui e a class MySQL

    private final String bancodedados;
    private final String host;
    private final String porta;
    private final String senha;
    private final String usuario;

    public MySQL(String db, String host, String port, String pw, String user) {
        this.bancodedados = db;
        this.host = host;
        this.porta = port;
        this.senha = pw;
        this.usuario = user;
    }

    public synchronized Connection conectar() {

        try {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://" + host + ":" + porta + "/" + bancodedados, usuario, senha);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }

    }

    public synchronized void execute(String query) {
    	Connection con = conectar();
        try {
            con.prepareStatement(query).executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

    public synchronized ResultSet getQueryResult(String query) {
        Connection con = conectar();
        try {
            return con.prepareStatement(query).executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }

    }

Coloque isso dentro da sua class com extensão a BukkitAPI

public static MySQL getMysql() {
        return mysql;
    }
public static MySQL mysql;

E essa dentro do onEnable

//MYSQL
mysql = new MySQL("lightcraft", "localhost", "3306", "", "root");
try {
   mysql.conectar().createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS `kitpvp` (`uuid` varchar(64), `kill` int, `death` int, `pontos` int, `caixas` int)");
} catch (SQLException e) {
   System.out.println("ERRO AO CONECTAR NO MYSQL");
}

Essa aqui na sua class de eventos pra quando ele entrar no servidor criar as colunas

@EventHandler
    public void loginMySQL(PlayerLoginEvent event) {

        new BukkitRunnable() {

            @Override
            public void run() {
                String uuid = event.getPlayer().getUniqueId().toString();
                ResultSet rs;
                try {
                    rs = KitPvP.getMysql().conectar().createStatement().executeQuery("SELECT * FROM `kitpvp` WHERE `uuid`='" + uuid + "';");
                    if(!rs.next()) {
                        KitPvP.getMysql().conectar().createStatement().executeUpdate("INSERT INTO `kitpvp` (`uuid` , `kill` , `death`, `pontos`) VALUES ('" + uuid + "', '0', '0', '0');");
                    }
                    rs.getStatement().getConnection().close();
                } catch (SQLException e1) {
                    System.out.println("ERRO: " + e1.getMessage());
                }
            }
        }.runTaskAsynchronously(KitPvP.servidor);
    }

Espero ter ajudado

Link para o comentário
Compartilhar em outros sites

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