Erro SQL Exception

IAe Galera…

Estou tentando executar uma função de inserção de dados no banco, mas
ocorre o seguinte erro:

java.sql.SQLException: Can not issue data manipulation statements with executeQuery().Erro de SQL
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.Statement.checkForDml(Statement.java:401)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1078)
at Cadastro.Estoque.setInserir(Estoque.java:30)
at Cadastro.Main.main(Main.java:17)

Alguém pode me dizer o que pode ser???

Este é o código:

package Cadastro;
import java.sql.*;

import javax.swing.JOptionPane;

public class Conexao 
{
	Connection conn;
	
	public Connection conecta() //throws ClassNotFoundException
	{
		String url = "jdbc:mysql://localhost:3306/db_sce";
		String user = "root";
		String pass = "root";
		
		
		try
		{
				Class.forName("com.mysql.jdbc.Driver");
				JOptionPane.showMessageDialog(null,"Conexão realizada com sucesso!", "Conexão com MySql", JOptionPane.PLAIN_MESSAGE);
				this.conn = DriverManager.getConnection(url, user, pass);	
				return conn;
		}
		catch(ClassNotFoundException e)
		{
			 JOptionPane.showMessageDialog(null,"Classe não encontrada");
			 return null;
		}
		catch(SQLException e)
		{
			System.out.println("Problemas com o BD "+ e);
			return null;
		}
		
			
	}

}
package Cadastro;
import java.sql.*;
//import java.util.Date; 
import javax.swing.JOptionPane;

public class Estoque 
{
	Produto produto;
	Funcionario funcionario;
//	Date data = new Date(System.currentTimeMillis());
	String relatorioEstoque;
	
	public static void setInserir(Produto produto)
	{
		try
		{
			String queryInsert = "INSERT INTO produto (nome, precoCusto, margemLucro, quantidade, fornecedor, codigo, precoVenda)" +
			" values "+
			"(\""+produto.nome+"\", "+produto.precoCusto+ ", "+produto.margemLucro+", "+produto.quantEstoque+", \""+produto.fornecedor+"\", \""+produto.codigo+"\", "+produto.precoVenda+")";
			
//			String queryInsert = "INSERT INTO produto (nome, precoCusto, margemLucro, quantidade, fornecedor, codigo, precoVenda)" +
//			"values"+
//			"("+"\Caixa de Som\"+","+ 100.0+","+);
			
			Conexao conexao = new Conexao();
			conexao.conecta();
			
			Statement stm = conexao.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			
			ResultSet rs = stm.executeQuery(queryInsert);
			while(rs.next())
			{
				System.out.println(rs.getString("nome")); 
			}
			
			JOptionPane.showMessageDialog(null, "Produto Cadastrado com sucesso!");
			
		}
		catch(SQLException e)
		{
			e.printStackTrace();
			System.out.println("Erro de SQL");	
		}

		
	}
	
	public void setAlterar(Produto produto)
	{
		this.produto.nome = produto.nome;
		
		//continua
		
	}
	
	public String getListar()
	{
		return this.relatorioEstoque;
	}
}

Desde já muito obrigado

executeQuery serve quando você precisa de um ResultSet. Mas comandos como INSERT e UPDATE, que não retornam um ResultSet, devem ser executados com executeUpdate ou execute.

Cuidado com Copy + Paste …

thingol

Valew msm, sou iniciante em java e existem várias coisas que ainda não tenho conhecimento.
Funcionou!
Vlw

Tio, a documentação é de graça e pode ser consultada em http://java.sun.com/javase/6/docs/index.html (se é que você não a baixou junto com o JDK, no arquivo jdkdoc.zip). Sempre que puder, dê uma olhadinha - ela é um bocadinho difícil de ler, mas com o tempo você se acostuma.

Aproveitando a deixa já que você está iniciando, aproveita para dar uma melhorada nos padrões de programação para o Java.

Evite usar este tipo de String na query, pois isso pode gerar erros e não é nada fácil de dar manutenção.
O melhor seria usar o PreparedStatement, ele evita sql inject também.


PreparedStatement st = con.prepareStatement("INSERT INTO produto (nome, precoCusto, margemLucro, quantidade, fornecedor, codigo, precoVenda) values (?, ?, ?, ?, ?, ?, ?)");
                                //Esta parte depende do tipo de dado que está na tabela do seu banco de dados
		st.setString(1, produto.getNome());
		st.setDouble(2, produto.getPrecoCusto());
		st.setDouble(3, produto.getMargemLucro());
		st.setInt(4, produto.getQuantEstoque());
		st.setString(5, produto.getFornecedor());
		st.setString(6, produto.getCodigo());
		st.setDouble(7, produto.getPrecoVenda());
                                st.execute();

Outra coisa quanto ao padrão, você não encapsulou os atributos da sua classe produto.
O ideal seria que eles estivessem como private e existissem os métodos get e set para eles.

Valeu!

EDIT - para os métodos set, o primeiro parâmetro é 1, o segundo é 2, etc.

valeu fmad27

vou mudar o padrão
Obrigado pela observação.