ClienteDAO Ajuda Urgente

Estou fazendo o que de errado? Aparentemente a conexão com o banco funciona perfeitamente e executa o processo. Após isso, ele abre a janela para inserir os dados do cliente, porém, as informações não gravam. Ela para antes mesmo de exibir a mensagem de (“GRAVADO”).

Trabalho de faculdade para piorar a situação rsrs.

Irei passar as classes a seguir.

CLIENTE:

package cliente;

/**
 *
 * @author Valentin
 */
public class cliente {

	public String nomeCliente;
	public String cpf;
	public String telefone;
	public String rua;
	public int numeroCasa; 
	public String bairro;
	public String cidade;
	public String estado;

	public String getNomeCliente() {
		return nomeCliente;
	}

	public void setNomeCliente(String nomeCliente) {
		this.nomeCliente = nomeCliente;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public String getRua() {
		return rua;
	}

	public void setRua(String rua) {
		this.rua = rua;
	}

	public int getNumeroCasa() {
		return numeroCasa;
	}

	public void setNumeroCasa(int numeroCasa) {
		this.numeroCasa = numeroCasa;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	@Override
	public String toString() {
		return "cliente{" + "nomeCliente=" + nomeCliente + ", cpf=" + cpf + ", telefone=" + telefone + ", rua=" + rua + ", numeroCasa=" + numeroCasa + ", bairro=" + bairro + ", cidade=" + cidade + ", estado=" + estado + '}';
	}
}

CLIENTEDAO:

package cliente;

import connectionDataBase.connectionFactory;
import java.sql.*;

public class clienteDAO {
	public static void main(String args[]) throws SQLException {
		cliente c = new cliente();
		
		PreparedStatement smt = connectionFactory.getConnection().prepareStatement(c.toString());
		System.out.println("Gravado!");
		connectionFactory.getConnection().close();
	}
}

ConnectionFactory:

package connectionDataBase;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class connectionFactory {

	public static final String DRIVER = "com.mysql.jdbc.Driver";
	public static final String URL = "jdbc:postgresql://localhost:5432/project";
	public static final String USER = "root";
	public static final String PASSWORD ="v4l3nt1n";
	
	public static Connection getConnection() throws SQLException {
		try {
			Class.forName(DRIVER);
			return DriverManager.getConnection(URL, USER, PASSWORD);
		} catch(ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null, "ERRO ao conectar com o banco");
			throw new SQLException();
		}
	}
}

Não vi o comando SQL de insert no seu código. Onde ele está?

Que diabos vc tá fazendo aí???Vc tá passando uma instância de Cliente a um método que est´´a esperando uma STRING!
Vc precisa pegar os dados populados de Cliente para poder salvar na base.Algo + ou - assim:

[code]
public void inserir(Connection conn, Cliente c)
throws NotFoundException, SQLException {

      String sql = "UPDATE Cliente SET nome = ? WHERE (ID = ? ) ";
      PreparedStatement stmt = null;

      try {
          stmt = conn.prepareStatement(sql);
          stmt.setString(1, c.getNome()); 

          stmt.setInt(2, c.getID()); 

          int rowcount = databaseUpdate(conn, stmt);
          if (rowcount == 0) {                 
               throw new NotFoundException("Cliente não pode ser salvo! (Chave primária não foi encontrada)");
          }
          if (rowcount > 1) {                 
               throw new SQLException("Erro ao atualizar");
          }
      } finally {
          if (stmt != null)
              stmt.close();
      }
}[/code]

Falta executar seu statement. Para isso, chame o método “execute()” de seu PreparedStatement.

Sim, mas ele tá criando o cliente dentro do main e não está populando(carregando com os dados) o que dará erros como um null pointer.E estava tão distraido que eu postei um update, quando ele quer um INSERT:

[code]
public synchronized void inserirClienteConnection conn, Cliente c) throws SQLException {

      String sql = "";
      PreparedStatement stmt = null;
      ResultSet result = null;

      try {
           sql = "INSERT INTO Cliente ( ID, nome) VALUES (?, ?) ";
           stmt = conn.prepareStatement(sql);

           stmt.setInt(1, c.getID()); 
           stmt.setString(2, c.getNome()); 
           int rowcount = atualizaBD(conn, stmt);
           if (rowcount != 1) {                 
                throw new SQLException("Erro!");
           }

      } finally {
          if (stmt != null)
              stmt.close();
      }
} [/code]
me ajudou bastante irmao obrigado, porem me perdi aqui, atualizaBD ? isso seria oque na verdade.

me ajudou bastante irmao obrigado, porem me perdi aqui, atualizaBD ? isso seria oque na verdade.

@valentinOliveira, no PreparedStatement espera uma String contendo uma instrução SQL. Algo do tipo:

INSERT  INTO nome_tabela (nome_cliente, cpf, ...) VALUES (?, ?, ...)

Depois você passa os atributos seu objeto, no caso, Cliente para o Statement.
Fica algo como:

stmt.setString(c.getNome());
stmt.setString(c.getCpf());

Depois executa o statement.

 stmt.execute();

E depois de executar tudo, lembre-se de fechá-los. Tanto o stmt, como a conexao.

Da forma que você tá fazendo tá errado porque você não ta instruindo o que fazer (insert ou delete ou select ou update).

Entendi… olha como está, porem mesmo assim, os dados ainda não populam, não chegam a tabela.

public class clienteDAO{

 public synchronized void inserirCliente (Connection con, cliente c) throws SQLException{
      String sql = "";
      PreparedStatement stmt = null;
      ResultSet result = null;
      
      try{
          sql = "INSERT INTO cliente (nomeCliente, cpf, telefone, rua, numeroCasa, bairro, cidade, estado) VALUES( ?, ?, ?, ?, ?, ?, ?, ?) ";
          stmt = con.prepareStatement(sql);
          
          stmt.setString(1, c.getNomeCliente());
          stmt.setString(2, c.getCpf());
          stmt.setString(3, c.getTelefone());
          stmt.setString(4, c.getRua());
          stmt.setInt(5, c.getNumeroCasa());
          stmt.setString(6, c.getBairro());
          stmt.setString(7, c.getCidade());
          stmt.setString(8, c.getEstado());
          int rowCount = atualizaBD(con, stmt);
          if (rowCount != 1){
              throw new SQLException("ERRO");
          }
      }finally{
          if(stmt != null){
              stmt.close();
          }
          
      }
     
         
      }

ps: atualizaBD constando cannot find symbol;

Poderia mostrar esse método atualizaDB() e o me dizer o porque ele é necessário nesse caso?

package cliente;

import java.sql.*;

public class clienteDAO {
	public synchronized void inserirCliente (Connection con, cliente c) throws SQLException {
		String sql = "";
		PreparedStatement stmt = null;
		ResultSet result = null;
		
		sql = "INSERT INTO cliente (nomeCliente, cpf, telefone, rua, numeroCasa, bairro, cidade, estado) VALUES( ?, ?, ?, ?, ?, ?, ?, ?) ";
		stmt = con.prepareStatement(sql);
		
		stmt.setString(1, c.getNomeCliente());
		stmt.setString(2, c.getCpf());
		stmt.setString(3, c.getTelefone());
		stmt.setString(4, c.getRua());
		stmt.setInt(5, c.getNumeroCasa());
		stmt.setString(6, c.getBairro());
		stmt.setString(7, c.getCidade());
		stmt.setString(8, c.getEstado());
		
		stmt.execute();
	}
}

Não dá nenhuma exception?