Criar banco de dados, tabelas e inserção pela aplicação java [Resolvido]

Galera, bom dia.

Tenho um botão com na minha aplicação, cujo a função é criar o banco de dados, com as tabelas, e fazer algumas inserções, o código está da seguinte forma:

private void btCriaBancoActionPerformed(java.awt.event.ActionEvent evt) {

    Conexao.getConnetionCreation();
    
    PreparedStatement pstm;
    ResultSet rs;
    
    
    String sql1 = "CREATE SCHEMA IF NOT EXISTS `tigerencia` DEFAULT CHARACTER SET utf8 ;";
    String sql2 = "USE `tigerencial` ;";
    String sql3 = "CREATE TABLE IF NOT EXISTS `tigerencial`.`pais` (\n" +
                "  `idPais` INT(11) NOT NULL AUTO_INCREMENT,\n" +
                "  `nome` VARCHAR(60) NOT NULL,\n" +
                "  `sigla` VARCHAR(10) NOT NULL,\n" +
                "  PRIMARY KEY (`idPais`))\n" +
                "ENGINE = InnoDB\n" +
                "AUTO_INCREMENT = 2\n" +
                "DEFAULT CHARACTER SET = latin1;";
    
    
       try
       {
           for(int i=1; i<=3; i++)
           {
            pstm = Conexao.getConnetionCreation().prepareStatement("sql"+i);//prepara a instrução sql.
            pstm.executeUpdate(); //Executa a instrução sql e transforma em um objeto.
            System.out.println("sql"+i);
           }
       }
       catch(SQLException e)
       {
           
       }    
}   

o problema é que nessa linha: pstm = Conexao.getConnetionCreation().prepareStatement(“sql”+i);

o parâmetro sql+i vira string e não referencia a variável, me retornando sql1. O que eu posso fazer para resolver esse problema?

Bom dia!

Tenta utilizar somente “pstm = Conexao.getConnetionCreation().prepareStatement(sql+sql1+sql2+sql3);”

Abraço

Obrigado pela tentativa, mais dessa forma receba uma exceção de sintaxe sql.

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USE `tigerencia` ;CREATE TABLE IF NOT EXISTS `tigerencia`.`pais` (
  `idPais` IN' at line 1

Nem precisa de for nesse caso…

pstm = Conexao.getConnetionCreation().prepareStatement(sql1);
pstm.addBatch(sql2);
pstm.addBatch(sql3);
pstm.executeBatch();
pstm.clearBatch();
pstm.close();

Dica: As crases nos nomes da base, tabelas, colunas etc não são necessários quando executados pelo java, usa-se crases quando executamos SQL pelo terminal para o mysql saber identificar o que é palavra reservada (ex: data) do que seria o nome data

Obrigado pela informação, não sabia da existência desse método batch, vou testar e te retorno.

Sempre leia a doc da API que for usar, isso salva vidas :joy:

rapaz, tenho certeza que sim, desculpa mesmo eu não sabia como pesquisar o que queria rs.

Testei na minha aplicação aqui, deu certo, muito obrigado pela instrução.

1 curtida