Campo auto incremento Mysql

5 respostas
E

Ola, eu tenho uma tabela em meu banco com o campo id auto incremento, mas nessa tabela eu precisaria fazer uma importação de dados via txt, o q eu gostaria é uma forma de desabilitar o auto incremento para fazer a importação, pois quando executo o comando ele esta pegando a sequencia do banco e não os valores do arquivo txt

5 Respostas

R

Se você tem um script com as operações de insert que deseja inserir o mysql vai inserir com os ids que estão nos inserts, mesmo usando o auto-incremento.
Mas você pode desabilitar o auto-incremento usando o alter table, por exemplo:

ALTER TABLE `seu_schema`.`sua_tabela` 
CHANGE COLUMN `id` `id` BIGINT(20) NOT NULL '' ;

Dessa forma ele remove da coluna ID a opção de auto-incremento, depois que realizar o processo para adicionar novamente a opção de auto-incremento:

ALTER TABLE `seu_schema`.`sua_tabela` 
CHANGE COLUMN `id` `id` BIGINT(20) NOT NULL AUTO_INCREMENT '' ;
E

O problema que estou usando Hibernate JTA e meu codigo seria dessa forma:

`    public void importarArquivo() {

File arquivo = new File(D:\entidade.txt);

Integer contador = 0;

try {

try (FileReader leitura = new FileReader(arquivo); BufferedReader ler = new BufferedReader(leitura)) {

while (ler.ready()) {

String linha = ler.readLine();

String coluna[] = linha.split("\|");
contador++;
                
                try {
                    entidade = new Entidade();
                    entidade.setIEntidade(Integer.parseInt(coluna[0]));
                    entidade.setNome(coluna[1]);
                    dao.alterar(entidade);// salvar(entidade);
                } catch (Exception e) {
                    Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, e);
                   JsfUtil.addErrorMessage(e, "Erro ao importar a linha: " + contador);
                }
                
                System.out.println("linha: " + coluna[0] + " - " + coluna[1]);
            }
        }
        JsfUtil.addSuccessMessage("Arquivo importado com sucesso!");
    } catch (IOException ex1) {
        System.out.println("Erro lendo arquivo. " + ex1.getLocalizedMessage());
    }
}

`

Arquivo:

100|modelo10
101|modelo11
102|modelo12
103|modelo13

R

Nesse tipo de operação o melhor a fazer é manter a coluna id do banco como auto-incremento e criar uma nova coluna para receber o código que você está inserindo. Então você teria o id do banco e o id que recebeu do arquivo em outra coluna. Nas linhas que já tem inseridas na tabela, você pode replicar os valores das colunas id com esta nova coluna.

E

Pois é, eu pensei nisso tambem ou em até criar uma forma de controlar o auto incremento manual

R

Se vc quer controlar manualmente, não crie suas tabelas com a chave do tipo auto-incremento. Para desabilitar o auto-incremento delas basta executar o alter table que te passei.

Criado 29 de janeiro de 2016
Ultima resposta 29 de jan. de 2016
Respostas 5
Participantes 2