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?