Problema com SQL

Olá pessoal, estou com um pequeno probleminha. A minha aplicação em Java com conexão ao MySql está dando erro na hora de fazer inserções, deleções e atualizações no banco. Será que tem algum problema no meu código? Vcs podem me ajudar? Esse é o meu código:

[code]public class Estoque {

public static void main(String[] args) throws IOException {
	String resp;
	Cadastrar cad = new Cadastrar();
	Funcionario func = new Funcionario();
	Produto prod = new Produto();
	Excluir ex = new Excluir();
	Pedido ped = new Pedido();
	Atualizar atual = new Atualizar();

	BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
	System.out.println("&&&&&&&&& Controle de Estoque &&&&&&&&&");
	System.out.println();
	System.out.println("Escolha uma opção");
	System.out.println("1- Cadastro Funcionario");
	System.out.println("2- Cadastro Produto");
	System.out.println("3- Cadastro Pedido");
	System.out.println("4- Exclusão");
	System.out.println("5- Atualização");
	String resp1 = bf.readLine();

	if (resp1.equals("1")) {

		System.out.println("nome do funcionario:");
		func.nome = bf.readLine();
		System.out.println("Cpf do funcionario:");
		func.cpf = bf.readLine();
		System.out.println("Rg do funcionario:");
		func.rg = bf.readLine();
		System.out.println("Endereco do funcionario:");
		func.endereco = bf.readLine();
		System.out.println("data de cadastro do funcionario:");
		func.data_cadastro = bf.readLine();
		System.out.println("Data de Nascimento do funcionario:");
		func.data_nascimento = bf.readLine();
		System.out.println("Telefone do funcionario:");
		func.telefone = bf.readLine();

		cad.cadatrarFuncionario(func);

	} else if (resp1.equals("2")) {

		System.out.println("Nome do Produto:");
		prod.nome = bf.readLine();
		System.out.println("Quantidade do Produto:");
		prod.quantidade = bf.readLine();

		cad.cadastrarProduto(prod);

	} else if (resp1.equals("3")) {

		System.out.println("Data de Pedido do Produto:");
		ped.data_pedido = bf.readLine();
		System.out.println("ID do Funcionário");
		ped.idfuncionario = bf.readLine();
		
		cad.cadastrarPedido(ped);

	} else if (resp1.equals("4")) {

		System.out.println("Digite sua opção");
		System.out.println("1- Excluir Funcionario");
		System.out.println("2- Excluir Produto");
		System.out.println("3- Excluir Pedido");

		resp = bf.readLine();

		if (resp.equals("1")) {
			System.out.println("Excluir Funcionario:");
			func.idfuncionario = bf.read();
			ex.excluirFuncionario(func);
		} else if (resp.equals("2")) {
			System.out.println("Excluir Produto:");
			prod.idproduto = bf.read();
			ex.excluirProduto(prod);
		} else if (resp.equals("3")) {
			System.out.println("Excluir Pedido:");
			ped.idpedido = bf.read();
			ex.excluirPedido(ped);
		}

	} else if (resp1.equals("5")) {
		System.out.println("Digite sua opção:");
		System.out.println("1 - Atualizar Funcionario");
		System.out.println("2 - Atualizar Produto");
		System.out.println("3 - Atualizar Pedido");
		resp = bf.readLine();

		if (resp.equals("1")) {
			atual.atualizarFuncionario(func);
		} else if (resp.equals("2")) {
			atual.atualizarProduto(prod);
		} else if (resp.equals("3")) {
			atual.atualizarPedido(ped);
		}
	}
}

}[/code]

[code]public class Cadastrar {

	BDMySql bd = BDMySql.getInstance();
	
public void cadatrarFuncionario(Funcionario func) {
	String sql = "insert into funcionario (nome, cpf, rg, endereco, telefone, data_nascimento, data_cadastro) values('"+ func.nome + "', '"+ func.cpf + "', '"+ func.rg + "', '" + func.endereco + "', '" + func.telefone + "', '" + func.data_nascimento + "', '" + func.data_cadastro + "')";
	
	bd.executarSQL(sql);
}

public void cadastrarProduto(Produto prod){
	String sql = "insert into produto (nome, quantidade) values('"+prod.nome+"', '"+prod.quantidade+"')";
	bd.executarSQL(sql);
}


public void cadastrarPedido(Pedido ped){
		String sql = "insert into pedido (data_pedido, idfuncionario) values ('"+ped.data_pedido+"', '"+ped.idfuncionario+"')";
		bd.executarSQL(sql);
		
}

}[/code]

[code]public class Atualizar {
BDMySql bd = BDMySql.getInstance();

public void atualizarFuncionario(Funcionario func){
	String sql = "update func where id = func.id";
	bd.executarSQL(sql);
}

public void atualizarProduto(Produto prod){
	String sql = "update prod where id = prod.id";
	bd.executarSQL(sql);
}

public void atualizarPedido(Pedido ped){
	String sql ="update ped where id = ped.id";
	bd.executarSQL(sql);
}

}[/code]

[code]public class Excluir {
BDMySql bd = BDMySql.getInstance();

public void excluirFuncionario(Funcionario func){
	String sql = "delete from funcionario where idfuncionario = '"+func.idfuncionario+"'";
	bd.executarSQL(sql);
}

public void excluirProduto(Produto prod){
	String sql = "delete from produto where idproduto = '"+prod.idproduto+"'";
	bd.executarSQL(sql);
}

public void excluirPedido(Pedido ped){
	String sql = "delete from pedido where idpedido = '"+ped.idpedido+"'";
	bd.executarSQL(sql);
}

}[/code]

Alguém pode por favor me ajudar??? :?:
A aplicação está conectando ao banco, mas sempre dá erro quando tento executar um desses métodos. Diz que "Não foi possível excutar SQL"
Obrigado!

Onde colocou a string de conexão com o banco?
coloque aí o erro que aparece (completo)…

É isso que acontece quando tento cadastrar um funcionário, por exemplo:
Nao foi possível realizar a conexão.
&&&&&&&&& Controle de Estoque &&&&&&&&&

Escolha uma opção
1- Cadastro Funcionario
2- Cadastro Produto
3- Cadastro Pedido
4- Exclusão
5- Atualização
1
nome do funcionario:
Luis
Cpf do funcionario:
1589743248
Rg do funcionario:
2497854674
Endereco do funcionario:
Rua Nova
data de cadastro do funcionario:
2006-08-10
Data de Nascimento do funcionario:
1983-12-16
Telefone do funcionario:
81287315
Nao foi possível executar SQL.

Essa é minha classe do Banco de Dados:

[code]public class BDMySql{

private static BDMySql singleton = null;
private Connection con;

//padrao de projeto que cria uma única instancia da classe BDMySql
public static BDMySql getInstance(){
	if (singleton == null)
	{
		singleton = new BDMySql();
	}		
		return singleton;
}

//construtor que conecta ao banco
BDMySql(){
	try {
		
		Class.forName("com.mysql.jdbc.Driver").newInstance();

	      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/estoque",
	        "root", "sgwfpass");
	 /* O que quer dizer cada um dos parâmentros acima
		*  banco ->     "jdbc:mysql://localhost:3306/sgwf"  //banco de nome sgwf no ip local (localhost)
		*  usuário -> "sgwf"
		*  senha -> "sgwfpass"
		*/
		
	   
	}
	catch(Exception e) {
		System.out.println("Nao foi possível realizar a conexão.");
	}
}


//Executar consultas no banco: SELECTs
public ResultSet executarBuscaSQL(String sql){
	try{
		Statement st = con.createStatement();
		ResultSet rs = st.executeQuery(sql);
		return rs;
	 }
	 catch(Exception e) {
		System.out.println("Nao foi possível recuperar dados.");
		return null;
	 }
	
}

public int executarBuscaSQL2(String sql){
	int idDado;
	try{
		Statement st = con.createStatement();
		ResultSet rs = st.executeQuery(sql);
		rs.next();
		idDado = rs.getInt("novoid");
		
		System.out.println(idDado);
		return idDado;
		//return rs;
	 }
	 catch(Exception e) {
		System.out.println("Nao foi possível recupear dados.");
		return 1;
	 }
	
}
//executar atualizações no banco: INSERTs, UPDATEs, DELETEs
public void executarSQL(String sql){
	 try{
		 
		Statement st = con.createStatement();
		st.executeUpdate(sql);
		st.close();
		
	 }
	 catch(Exception e) {
		System.out.println("Nao foi possível executar SQL.");
	 }
}
            public void fecharConexao(){
	try{
		con.close();
	 }
	 catch(Exception e) {
		System.out.println("Nao foi possível fechar a conexão.");
	 }
   
}

public void finalize(){
 	fecharConexao();

}

}[/code]

Então, vc pode me dizer se há algum problema com as minhas classes?

Bom dia… eu iria te chamar de “cara”, mas parece que não é bem isso neh… rs

Eu verifiquei aqui, mas parece estar certo mesmo… não rodo o mysql aqui nao, só o SQL Server 2005… por isso nem peguei pra testar…

Mas o que voce pode fazer é pegar a String de inserção que voce gera e tentar inserir através de algum editor de MySql… ou atraves da ferramenta do proprio.

Verifique se vai dar certo.

Caso tenha êxito, aí voce poderia fazer uma classe de testes de conexao… tipo… chama a classe, manda conectar no BD. Aí voce exibe msg de falha ou sucesso…

Outra coisa é voce verificar as varáveis de ambiente… e conferir a String de conexão…

No mais, qualquer coisa posta aqui, ou se eu pensar em outra coisa, tb te falo!
Abraço!

Ah… outra coisa… dica:

Quando colocar qualquer string de conexão com BD ou qualquer outra coisa que possua usuário e senha… deixe-os “mascarados”…

Na string que voce passou do BD, coloque tipo… user=NOMEUSUARIO e password=SENHA…

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/estoque", "USUARIO", "SENHA");

:wink:

Tá certo Rafael, vou verificar sim.
Valeu!!!
Ah, e a propósito, eu sou uma garota. :slight_smile:

Obrigada pela atenção!!!

Acabou de ganhar pontos no fórum!!!

Pq acabei de ganhar pontos no fórum???
Por ser uma garota??? :?: :slight_smile:

também…

rsrsrsrs
Olha, até agora não tive sucesso com essa aplicação não.
Já olhe, já alterei algumas coisinhas no código pra ver se dava certo, mas até agora nada.
Tem algum problema na string de conexão ao banco, mas ainda não consegui descobrir o que é. :?:

[quote=letyalbuq]Pq acabei de ganhar pontos no fórum???
Por ser uma garota??? [/quote]

Eu não diria “ganhar pontos”, ao contrario…se vc não mostrar que é autentica a galera vai achar que vc é um fake. Ai vão de ignorar ou te malhar rsrsrsrs.

Vamos lá…no local onde ocorre a mensagem notei que existe apenas uma mensagem colocada por vc “System.out.println(“Nao foi possível executar SQL.”);”, adiciona essa linha System.out.println(e.printStackTrace()) para mostrar a pilha de erros. As mensagens que estão na pilha podem ajudar a esclarecer o misterio.

P.S NÃO ESQUEÇA DE POSTAR AS MENSAGENS RETORNADAS NA PILHA.

flws

Fiz o que vc falou, inseri e.printStackTrace() no método execultarSQL

[code]public void executarSQL(String sql){
try{

		Statement st = con.createStatement();
		st.executeUpdate(sql);
		st.close();
		
	 }
	 catch(Exception e) {
		e.printStackTrace();
		System.out.println("Nao foi possível executar SQL.");
		
	 }
}[/code]

O resultado foi esse:

java.lang.NullPointerException
at BDMySql.executarSQL(BDMySql.java:81)
at Cadastrar.cadatrarFuncionario(Cadastrar.java:9)
at Estoque.main(Estoque.java:46)
Nao foi possível executar SQL.

Oi,

Se entendi bem o atributo “con” na linha 81 está nulo, verifique a criação do objeto descrito pela classe BDMySql e certifique se o objeto da conexão está sendo realmente atribuido à este atributo ( con ). Se estiver sendo atribuido verifique o fluxo para ver se algum método esta fazendo com que ele fique nulo.

flws

Outra coisinha…

Se você fêz isso ou coisa parecida em algum lugar BDMySql bd = new BDMySql(); peço que mude para BDMySql bd = BDMySql.getInstance();

[]'s

Olha, eu agora eu consegui cadastrar funcionário. Mas só isso mesmo.
Não entendo o que está acontecendo, já que a estrutura dos métodos são bem parecidas, mas apenas um funciona.
Não entendi. Alguém sabe me explicar o que tá acontecendo???

Você alterou algo no código?
se sim, posta aí pra a gente ver…

e se puder e nao tiver feito, faz o seguinte em todos os erros que voce colocou (Não foi possível conectar ao SQL… etc)

e se tiverem mais erros, posta também.

Descobri ontem o problema da aplicãção, depois de tanto analisá-la.
O que acontece é que ás vezes o eclipse fica meio doido, e dá erro onde não tem.
Outra coisa que eu deixei passar nessa aplicação, foram as conversões. Pois o programa lê do teclado uma string, e no banco alguns campos são do tipo inteiro, por isso que eu não tava conseguindo cadastrar nem produto e nem pedido.
Agora, é só partir para as telinhas no netbeans. :slight_smile: