Conexão com Banco de Dados MySQL

9 respostas
A

Olá pessoal
Estou ha uma semana tentando fazer uma aplicação conectar ao Banco de dados mysql e dá este erro.

com.mysql.jdbc.exceptions.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 ‘values (‘cunha’, ‘cunha’, 12)’ at line 1

Já conferi a sintaxe do SQL e usei dois conectores diferentes e nada.

Meu código é :

package Persistencia;
import java.sql.*;

public class Banco_dados {

private Connection conexao;

private PreparedStatement status;

private ResultSet Tabela ;

public Banco_dados(){

try{  
  Class.forName("com.mysql.jdbc.Driver");
  conexao = DriverManager.getConnection("jdbc:mySQL://localhost/estoque","root","bologna");
        
}catch(Exception e){
    System.out.println("Problemas em conectar.");
    e.printStackTrace();
}

}

public void desconecta() throws SQLException{

try{

conexao.close();

}catch(Exception e){

System.out.println(Problemas em fechar a conexão.);

e.printStackTrace();

}

}

public void manipula_dados (int ID, String Nome_Produto, String Descricao, int Qtd, String Tipo_SQL) throws SQLException{
String SQL = new String();

if (Tipo_SQL.contentEquals("insere")){
      SQL = "INSERT INTO estoque VALUES (Nome_Prod, Descricao, qtd) " +
            "values ('" + Nome_Produto +"', '"+ Descricao +"', "+ Qtd + ");";
      status = conexao.prepareStatement(SQL);
      status.executeUpdate();          
      System.out.println(SQL);            
  }
  else if(Tipo_SQL.contentEquals("deleta")){
     SQL = "DELETE FROM estoque WHERE idestoque="+ ID +";";
     status = conexao.prepareStatement(SQL);
     status.executeUpdate();          
     System.out.println(SQL);              
  }                        
  else if(Tipo_SQL.contentEquals("seleciona")){
        SQL = "SELECT * FROM estoque " +
              "WHERE Nome_Prod LIKE '" + Nome_Produto + "'% ;";
       status = conexao.prepareStatement(SQL);
       setTabela(status.executeQuery());          
       System.out.println(SQL); 
  
  }           
  else 
    System.out.println("Sem definição operação !!!");

}

public ResultSet getTabela() {
    return Tabela;
}

public void setTabela(ResultSet Tabela) {
    this.Tabela = Tabela;
}

}

É executado pela funcao:

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

Estoque dado = new Estoque();

dado.setNome(JTF_produto.getText());

dado.setDescricao(JTA_descricao.getText());

dado.setQuant(Integer.parseInt(JTF_qtd.getText()));

try{

Banco_dados persistencia = new Banco_dados();

persistencia.manipula_dados(0, dado.getNome(), dado.getDescricao(),dado.getQuant(), insere);

persistencia.desconecta();

}catch(Exception e){

e.printStackTrace();

}

}

Gostaria muito de contar com a ajuda de vocês e já tentei pesquisar em vários lugares onde não achei nada que me ajudasse.

9 Respostas

raphaelfs

Bom cara,
quais são os tipos no banco das colunas Nome_Prod, Descricao e Qtd (Number? Int? Varchar?)
Provavelmente seja por causa de tipo incompaveis da aplicação com o banco

[]'s

TangZero

Olá,

Por favor uses as tags Code. Isso facilita a vida de quem tenta entender o código.
:wink:

A

idestoque INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Nome_Prod VARCHAR(30), Descricao VARCHAR(100), qtd INTEGER NULL,

Obrigado pela dica TangZero.

A

Usei dois tipos de dados como CHAR e VARCHAR, no qual as duas eu testei o comando SQL direto no MYSQL que funcionou normalmente, implementei algumas saídas para conferir a SQL e tudo estava correto.

raphaelfs

ok

será que nao pode ser isso ?

idestoque INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,  
   Nome_Prod VARCHAR(30),  
   Descricao VARCHAR(100),  
   qtd INTEGER NULL

tente qtd INTEGER NOT NULL ou sem nada mesmo se nao for obrigatorio o preenchimento
Pode ser isto… tem mais campos na tabela? Se tiver veja se nao são NOT NULL
Caso forem, vc deve entrar com os dados nele tb !

[]'s

A

[img]ok

será que nao pode ser isso ?
view plaincopy to clipboardprint?

  1. idestoque INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  2. Nome_Prod VARCHAR(30),
  3. Descricao VARCHAR(100),
  4. qtd INTEGER NULL

idestoque INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Nome_Prod VARCHAR(30), Descricao VARCHAR(100), qtd INTEGER NULL

tente qtd INTEGER NOT NULL ou sem nada mesmo se nao for obrigatorio o preenchimento
Pode ser isto… tem mais campos na tabela? Se tiver veja se nao são NOT NULL
Caso forem, vc deve entrar com os dados nele tb !
[/img]

Deixei qtd sem o null e continua aparecendo o erro.

raphaelfs

Tente colocar sua linha SQL exatamanete assim:

"INSERT INTO estoque (Nome_Prod, Descricao, qtd) VALUES ('+" + Nome_Produto +"', '"+ Descricao +"', "+ Qtd + ")";

Cuidado com os espaços e quebras de linha.
ao inves de como vc tinha colocado:

"INSERT INTO estoque VALUES (Nome_Prod, Descricao, qtd) " +
"values ('" + Nome_Produto +"', '"+ Descricao +"', "+ Qtd + ");";

[]'s

A

Muito obrigado raphaelfs, o erro estava na linha do comando insert que estava com um VALUES sobrando na declaração das colunas.

raphaelfs

OK !!

[]'s

Criado 30 de julho de 2008
Ultima resposta 30 de jul. de 2008
Respostas 9
Participantes 3