Jsf + mysql - duvida

Olá Pessoal,

to tentando fazer uma conexao com o MYSQL usando jsf . nao sei pq os dados do formulario nao estao sendo inseridos no DB. A conexao é estabelecida. Quem puder dar informar o por que nao conseguir. agradeco.

obs.: Adicionei o driver mysql ao projeto.

abraco,

meu bean

public class Cliente {
	private String nome; 
	private String cidade;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCidade() {
		return cidade;
	}
	public void setCidade(String cidade) {
		this.cidade = cidade;
	} 
}

controlador

package br.com.controller;



import br.com.bean.Cliente;
import br.com.dao.ClienteImpDAO;
import br.com.dao.DAO;

public class Controler {
	private Cliente cliente;
	
	private String msgtest;
	
	public String getMsgtest() {
		return msgtest;
	}

	public void setMsgtest(String msgtest) {
		this.msgtest = msgtest;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public String salvar(){
		DAO dao = new ClienteImpDAO();
		dao.salvar(cliente);
		
		return "salvar";
	}
	
	public String novo(){
		this.cliente = new Cliente();
		return "novo";
	}
	
	
}

[code]DAO.JAVA
package br.com.dao;

import br.com.bean.Cliente;

public interface DAO {
public void salvar(Cliente cliente);
}
[/code]

package br.com.dao;

import java.sql.Connection;
import java.sql.Statement;

import br.com.bean.Cliente;
import br.com.util.Conexao;

public class ClienteImpDAO implements DAO {

	public void salvar(Cliente cliente) {
		Connection con = Conexao.getConnection();
		
		String sql = "";
		
		sql +="insert into cliente(nome,email)";
		sql += "values ('"+ cliente.getNome() + "'," + "'" + cliente.getCidade()+ "');";
		try{
			Statement st  = con.createStatement();
			st.executeUpdate(sql);
		
		}catch (Exception e) {
			
		
		}
	}
		
	

}

[code]conexao.java
package br.com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {

static String status=""; 

public static Connection getConnection(){
Connection conn=null;
try{

Class.forName("com.mysql.jdbc.Driver").newInstance();

String url = "jdbc:mysql://localhost/livraria?user=camilo&password=123";
conn = DriverManager.getConnection(url);

status = "Connection opened";}

catch (SQLException e) {
status = e.getMessage();
}catch (ClassNotFoundException e) {
status = e.getMessage();

}catch(Exception e){
status = e.getMessage();}
return conn;}}
[/code]

Crie um teste do seu controller e veja se ta inserindo…Como criar teste unitarios?Veja no google. E depois,evite usar DAOS, use hibernate e toplink.Vc economiza um tempo e o codigo fica mais organizado.Eu comecei a trabalhar desta forma também.Mas a manutenção é trabalhosa, com os frameworks de persistencias o tempo de desenvolvimento cai para mais de 3x .

E depois com este codigo n vai inserir nada mesmo…Cada a pagina .jsp ou a interfase para adicionar valores?

eh eu fiz isso, agora e funcionou, porem nao sei pq ainda no modelo jee, quando clico no botao cadastrar do form, ele nao está salvando no bd o que foi digitado. =/

Poste seu codigo jsp da sua pagina de cadastro.O erro deve estar lá

[code]<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h” %>
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f” %>

		<h:outputText value="Cidade" />
		<h:inputText id="cidade" value="#{controle.cliente.cidade}"/>
		 <br/>
		 <h:commandButton value="Cadastrar" action="#{controle.salvar}"/>
		</h:panelGrid>
		</h:form>
	</f:view>
</body>	
[/code]

face-config.xml

<?xml version="1.0" encoding="UTF-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <managed-bean> <managed-bean-name>controle</managed-bean-name> <managed-bean-class>br.com.controller.Controler</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>/menu.jsp</from-view-id> <navigation-case> <from-outcome>novo</from-outcome> <to-view-id>/formCli.jsp</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/formCli.jsp</from-view-id> <navigation-case> <from-outcome>salvar</from-outcome> <to-view-id>/salved.jsp</to-view-id> </navigation-case> </navigation-rule> </faces-config>

Ola.Eu vi seu codigo e está tudo oks.Mas acho que o erro ta na configuração

O arquivo faces-config.xml está correto?

Geralmente o codigo do manage beam fica neles.Segue exemplo

 <managed-bean>
        <managed-bean-name>tiposAcaoC</managed-bean-name>
        <managed-bean-class>br.com.sistemajuridicowar.controller.TiposAcaoController</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

Renomeie o arquivo face-web.xml para faces-config.xml

opa! eu que digitei errado ta certo meu arquivo faces-config.xml, mas nao faco ideia pq nao ta inserindo. a pagina saved.jsp eh chamada normalmente. assim nao aprece erro de nada, porem nao entendo pq nao adiciona…no bd a informacao digitada.

Vc está usando JSF ou Visual JSF?

Pelo que vejo.O código parece estar tudo ok.Verifique se vc colocou todos os jar dos frameworks corretamente.

nao to usando o visual JSF nao.
veja a imagem em anexo, todos os .jars.


tem como vc postar uma foto do erro? e oq acontece quando vc clica no botao salvar? Lá no seu insert, por acaso nao precisa dar commit?

Estou olhando o codigo por cima…Mas verifique quando vc ta dando o insert se vc esta dando commit. e posta imagem da sua tela de cadastro ae…ae acho q ja sei aonde pode estar o problema

essa ai eh eh o form de cadastro.

A questao que nao tem erro, simplesmente o que for digitado nao está sendo armazenado no DB.


Olá.Acho que ja achei seu erro.Com mais calma achei um erro Statement st = con.createStatement(); --<<<

Lá no insert
declarar
PreparedStatement ps =null;
Connection con = null;

Depois do insert colocar

o correto seria
con=this.con;
con.prepareStatement(SQL);

OBS: sempre ao terminar de fazer um inser,update,delete sempre finalize

ConnectionFactory.closeConnection(con,ps)