Erro de sql que eu nao entendo

18 respostas
douglasmorais

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column ‘POLICARBONATO’ in ‘field list’

O meu código ta aqui

for( Esferico=inicio; Esferico<=6;Esferico=Esferico+0.25) {
for( Cilindrico=0.25; Cilindrico<=3;Cilindrico=Cilindrico+0.25) {

descr = “” +"POLICARBONATO " +Esferico+ “+” +Cilindrico;
System.out.println(descr);

plug.conecta(“com.mysql.jdbc.Driver”,“jdbc:mysql://localhost/produtos”,“root”,“admin”);

String insertsql = “insert into lentes (esferico,cilindrico,descricao) values (”+Esferico+","+Cilindrico+","+descr+")";
plug.grava(insertsql);

Alguem saberia dizer a razao desse erro

18 Respostas

Marky.Vasconcelos

Coloque a descr entre aspas para o insert.

for( Esferico=inicio; Esferico<=6;Esferico=Esferico+0.25) { 
for( Cilindrico=0.25; Cilindrico<=3;Cilindrico=Cilindrico+0.25) { 

descr = "" +"POLICARBONATO " +Esferico+ "+" +Cilindrico; 
System.out.println(descr); 

plug.conecta("com.mysql.jdbc.Driver","jdbc:mysql://localhost/produtos","root","admin"); 

String insertsql = "insert into lentes (esferico,cilindrico,descricao) values ("+Esferico+","+Cilindrico+", '"+descr+"')"; 
plug.grava(insertsql);
A

Use placeholdrers para os parâmetros e os setters do PreparedStatement para passar os valores

"insert into lentes (esferico,cilindrico,descricao) values (?,?,?)";
douglasmorais

Mark_Ameba,

fiz conforme sua recomendação porem o erro mudou.

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column ‘descr’ in ‘field list’

marcelogds

Checa os nomes dos campos da tabela em que vc esta fazendo o insert. Use exatamente os mesmos nomes e se possivel os placeholders que o Arnaldo recomendou.

V

Cara, pelo o erro esta falando que não existe a coluna POLICARBONATO e a outra também descr não existe na sua tabela.

Verifica se elas se encontram lá. e se o nome esta corretamente digitado.

vi-gb

Acho que por ser uma string o desc tem q ta entre aspas sabe “”"+desc+""" ou algo assim, pq o " vai fazer sair a aspas na query.

victorwss

Tem gente que nunca ouviu falar de SQL-injection…

douglasmorais

SQL-Injection ???

douglasmorais

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 'Policarbonato -6.00+0.25)' at line 1

public class Testa14{   
  
public static void main(String args[]){   
conexao plug = new conexao();   
int inicio = -6;   
double Esferico;   
double Cilindrico;   
String descr = "";   
String descricao="";   
for( Esferico=inicio; Esferico<=6;Esferico=Esferico+0.25) {   
for( Cilindrico=0.25; Cilindrico<=3;Cilindrico=Cilindrico+0.25) {   
//for( Eixo=1; Eixo<=180;Eixo=Eixo+1){   
descricao = "POLICARBONATO " +Esferico+ "+" +Cilindrico;   
System.out.println(descricao);   
plug.conecta("com.mysql.jdbc.Driver","jdbc:mysql://localhost/produtos","root","admin");   
  
String insertsql = "insert into lentes (esferico,cilindrico,descricao) values ("+Esferico+","+Cilindrico+descricao+")";   
  
plug.grava(insertsql);   
}   
}   
plug.desconecta();   
}   
}

Policarbonato -6.00+0.25
isso aí é o que deveria ser salvo na coluna descricao mas não ta funcionando.

vi-gb

Da uma lida neste tutorial pra ver se te ajuda:
http://www.guj.com.br/java.tutorial.artigo.115.1.guj
Neste link tbm tem apostila de bd que vai desde o jeito que voce esta fazendo até o correto.
http://java.danieldestro.com.br/

douglasmorais

valeu, vou ler

fantomas

douglas,

Substitui esta linha

String insertsql = "insert into lentes (esferico,cilindrico,descricao) values (" + Esferico + "," + Cilindrico +","+"'"+descricao+"')";

pela que vc tem no código, pra ver se funciona.

O resultado dela é este aqui:

A coluna deve ser caracter logo tem que colocar aspas simple em volta do valor.

Espero ter ajudado.

flws

douglasmorais

Entao Fantomas, a coluna descricao é de caracteres. Observe, eu não estou colocando aspas duplas. Aliás não estou colocanco nenhum tipo de aspas.
Eu acho que o problema deve ser com a maneira de atribuição da variável descricao na linha 13

Focao
String insertsql = "insert into lentes (esferico,cilindrico,descricao) values ("+ Esferico + ","    + Cilindrico + ","+"'"+descricao+"')";

tem que ser assim mesmo ?

Não pde ser PrepareStatement ?

String insert = "INSERT INTO lentes (esferico,cilindrico,descricao) values (?,?,?)";   
  
            pstmt = connection.prepareStatement(insert);   
            pstmt.setDouble(Esferico , Esferico  );   
            pstmt.setDouble(cilindrico, cilindrico);   
           pstmt.setString(descricao, descricao);

boa sorte

coloca o erro aí

douglasmorais

Aff, não dá certo essa porcaria… Desisto

vi-gb

Calma, me diga quais campos tem sua tabela e de que tipo sao (ex: int, varchar).

Tenta pegar a query pronta e inserir pelo prompt no mysql pra ver que erro da, as vzs o erro la é mais significativo.

M

Calma… é importante aprender sempre do melhor modo. O modo correto é usar PreparedStatement. Sugiro que leia e vá acompanhando a apostila FJ-21 da Caelum, disponível para download.

douglasmorais

Entao, testando pelo MySQL FRONT, o código funciona.
O problema, eu acho, está sendo usar a variável descricao. se eu coloco o valor real no insert funciona certinho.
A minha tabela foi feita assim:

esferico (int)

cilindrico(int)

descricao(VarChar)
Criado 9 de fevereiro de 2009
Ultima resposta 9 de fev. de 2009
Respostas 18
Participantes 10