Problema com Sintaxe MySQL

3 respostas
gknedo
Galera, sou novo com Java e estou tendo um probleminha ao tentar usar um Comando MySQL. A linha é a seguinte:
String sql = "CREATE DATABASE IF NOT EXISTS archer "
                    + "DEFAULT CHARSET latin1;"
                    + "USE archer;"

                    + "CREATE TABLE IF NOT EXISTS directories ("
                    + "`ID` int(10) unsigned not null auto_increment,"
                    + "`DIRECTORY_NAME` varchar(255) not null,"
                    + "`DATE` bigint(64) not null,"
                    + "`SIZE` bigint(64) not null,`"
                    + "FILES_NUMBER` int(11) not null,"
                    + "`SUBDIRECTORIES_NUMBER` int(11) not null,"
                    + "PRIMARY KEY (`ID`)"
                    + ") ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=20492;"
                    + "TRUNCATE TABLE  `directories`;"

                    +"CREATE TABLE IF NOT EXISTS `extensions` ("
                    + "`ID` int(10) unsigned not null auto_increment,"
                    + "`EXTENSION` varchar(10) not null,`TYPE` varchar(15) not null,"
                    + "PRIMARY KEY (`ID`),"
                    + "UNIQUE KEY (`EXTENSION`)"
                    + ") ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;"
                    + "TRUNCATE TABLE  `extensions`;"

                    + "CREATE TABLE IF NOT EXISTS `files` ("
                    + "`ID` int(10) unsigned not null auto_increment,"
                    + "`FILE_NAME` varchar(100) not null,"
                    + "`SIZE` bigint(64) not null,"
                    + "`DATE` bigint(64) not null,"
                    + "`EXTENSION` varchar(20) not null,"
                    + "`DIRECTORY` varchar(255) not null,"
                    + "PRIMARY KEY (`ID`)"
                    + ") ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=107764;"
                    + "TRUNCATE TABLE  `files`;";
            PreparedStatement stmt = new ConnectionFactory().getConnection().prepareStatement(sql);
            stmt.execute();
            stmt.close();
Quando executo-a recebo a mensagem:
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 archer;CREATE TABLE IF NOT EXISTS directories (`ID` int(10) unsigned not nul' at line 1

Alguém sabe me dizer o problema que está a ocorrer?
Tnx Men!

3 Respostas

vinilima

veja se são as aspas simples.

`ID` int(10)

// substitua por
'ID' int(10)
prog.tiago

Boa noite!

Eu já tive esse problema e tratava-se das aspas.

No entanto aproveito esse tópico do colega:

Eu sempre programei colocando os comandos SQL dentro do meu código. De uns tempos para cá, optei em deixar todos os meus comandos SQL em um arquivo PROPERTIES. Isso é interessante. Sei que é funcional, mas só aproveito o tópico para saber se vcs também fazem assim ou se fazem de forma diferente.

Um exemplo
#Armazena todas as sqls de consulta utilizadas no sistema
#============================================================


#Lista todos os alunos presentes no banco de dados. Busca a junção da matrícula (user_name) com o nome (full_name)
adquirir.matriculas.nomes.alunos = "SELECT user_name + ' - ' + full_name AS user_name, full_name  FROM tbl_user"

Abraços :lol:

gknedo
prog.tiago:
Boa noite!

Eu já tive esse problema e tratava-se das aspas.

No entanto aproveito esse tópico do colega:

Eu sempre programei colocando os comandos SQL dentro do meu código. De uns tempos para cá, optei em deixar todos os meus comandos SQL em um arquivo PROPERTIES. Isso é interessante. Sei que é funcional, mas só aproveito o tópico para saber se vcs também fazem assim ou se fazem de forma diferente.

Um exemplo
#Armazena todas as sqls de consulta utilizadas no sistema
#============================================================


#Lista todos os alunos presentes no banco de dados. Busca a junção da matrícula (user_name) com o nome (full_name)
adquirir.matriculas.nomes.alunos = "SELECT user_name + ' - ' + full_name AS user_name, full_name  FROM tbl_user"

Abraços :lol:

Em geral crio um gerenciador de conexões e para cada classe crio um DAO.
O gerenciador de conexões me dá as conexões de onde vou pegar os PreparedStatements. E as classes classeDAO de cada objeto é que gerencia o banco de dados.
Antes eu deixava todas as DAOs em uma única classe, mas a pouco tempo caiu a ficha que em projetos grandes isso seria muito trabalhoso e de dificil exportação. Então para cada classe que utiliza o BD tenho uma DAO correspondente.

E obrigado vinilina, era isto mesmo, peguei o código gerado pelo export de uma tabela e não reparei nas aspas, thanks man!

###EDIT###
Isto era só parte do problema, continuo tendo mesmo erro...
Tentei fazer a consulta pelo MySQL mesmo e deu o mesmo erro.

Criado 9 de março de 2011
Ultima resposta 9 de mar. de 2011
Respostas 3
Participantes 3