Repare q na linha 30 da classe ConnectionFactory vc está retornando null.
Faz o seguinte, faz a declaração do Connection antes do try, e ao invés de colocar “return null”, coloque “return con”.
E sua outra dúvida é como fazer um update da tabela pessoa, é isso?
Acho q é mais ou menos assim:
update pessoa set cod_cliente = <cod_cliente> where id = <id>
package DAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
import Conexao_banco.ConnectionFactory;
public class ClienteDAO {
private Connection con;
public void cadastraCliente() {
try {
String cod_cliente = JOptionPane.showInputDialog(null, "Informe o código: ");
con = ConnectionFactory.createConnection();
PreparedStatement ps = con.prepareStatement("insert into table pessoa (cod_cliente) values (?)");
ResultSet rs = ps.executeQuery();
if (rs.next()){
System.out.println("Existe Registro");
}
ps.setString(1, cod_cliente);
ps.executeUpdate();
ps.close();
rs.close();
con.close();
}
catch(Exception e) {
System.out.println ("Não foi possivel conectar com o banco! - Erro Conexão ClienteDAO");
e.printStackTrace();
}
}
}
package Conexao_banco;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public static Connection createConnection() throws SQLException{
String driver = "org.postgresql.Driver";
String user = "postgres";
String senha = "postgres";
String url = "jdbc:postgresql://localhost:5432/teste_dao";
try
{
Class.forName(driver);
Connection con = null;
con = DriverManager.getConnection(url, user, senha);
System.out.println("Conexão realizada com sucesso.");
}
catch (ClassNotFoundException ex) {
System.err.print(ex.getMessage());
}
return null;
}
}
package Principal;
import javax.swing.JOptionPane;
import DAO.ClienteDAO;
public class Principal {
static Cliente cliente = new Cliente();
static ClienteDAO cDao = new ClienteDAO();
public static void main(String[] args) {
int opcao;
String menu;
menu = "Carlinhos Motos\n";
menu += "1 - Cadastro de Clientes\n";
menu += "8 - Aterar Cliente\n";
menu += "11 - Excluir Cliente\n";
menu += "14 - Listar Cliente\n";
menu += "0 - Sair\n";
do {
opcao = Integer.parseInt(JOptionPane.showInputDialog(menu));
if (opcao == 0){
break;
}
switch(opcao) {
case 1:
cDao.cadastraCliente();
break;
case 2:
// consultarCliente();
break;
}
} while (opcao != 0);
System.exit(0);
}
}
java.lang.NullPointerException
at DAO.ClienteDAO.cadastraCliente(ClienteDAO.java:22)
at Principal.Principal.main(Principal.java:36)Conexão realizada com sucesso.
Não foi possivel conectar com o banco! - Erro Conexão ClienteDAO
o erro pode ser porque na tabela pessoa tem mais de uma coluna e eu estou tentando inserir so uma para teste?
java.lang.NullPointerException
at DAO.ClienteDAO.cadastraCliente(ClienteDAO.java:22)
at Principal.Principal.main(Principal.java:36)Conexão realizada com sucesso.
Não foi possivel conectar com o banco! - Erro Conexão ClienteDAO
java.lang.NullPointerException
at DAO.ClienteDAO.cadastraCliente(ClienteDAO.java:22)
NullPointerException significa que uma referência nula estava tentando executar uma determinada ação, como invocar algum método.
A linha 22 é essa:
PreparedStatement ps = con.prepareStatement("insert into table pessoa (cod_cliente) values (?)");
Supondo que as linhas postadas seguem a da sua classe. Aposto que tu não conectou ao banco.
Ele apresenta essa mensagem: “Conexão realizada com sucesso” ?
Senão, é porque nem chegou a conectar, então precisas ver se as URL´s, usuário, senha e etc estão corretos e o banco, obviamente, está on.
package Conexao_banco;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
private static Connection con;
public static Connection createConnection() throws SQLException{
String driver = "org.postgresql.Driver";
String user = "postgres";
String senha = "postgres";
String url = "jdbc:postgresql://localhost:5432/teste_dao";
try
{
Class.forName(driver);
Connection con = null;
con = DriverManager.getConnection(url, user, senha);
System.out.println("Conexão realizada com sucesso.");
}
catch (ClassNotFoundException ex) {
System.err.print(ex.getMessage());
}
return con;
}
}
Mesmo erro
java.lang.NullPointerException
at DAO.ClienteDAO.cadastraCliente(ClienteDAO.java:22)
at Principal.Principal.main(Principal.java:36)
Conexão realizada com sucesso.
Não foi possivel conectar com o banco! - Erro Conexão ClienteDAO
Como o Guilherme disse, vc está criando 2 objetos Connection.
Um objeto de classe, e um local (dentro do try), porém o que vc está retornando é o de classe, que nunca foi inicializado.
mas se eu removo dai não consegue conectar no banco da o erro
Conexão realizada com sucesso.
Não foi possivel conectar com o banco! - Erro Conexão ClienteDAO
org.postgresql.util.PSQLException: Nenhum valor especificado para parâmetro 1.
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:178)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:246)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
at DAO.ClienteDAO.cadastraCliente(ClienteDAO.java:23)
at Principal.Principal.main(Principal.java:36)
pode ser porque estou tentando inserir so uma coluna em uma tabela que tem mais colunas?
[quote=queroaprender]mas se eu removo dai não consegue conectar no banco da o erro
Conexão realizada com sucesso.
Não foi possivel conectar com o banco! - Erro Conexão ClienteDAO
org.postgresql.util.PSQLException: Nenhum valor especificado para parâmetro 1.
at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:178)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:246)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
at DAO.ClienteDAO.cadastraCliente(ClienteDAO.java:23)
at Principal.Principal.main(Principal.java:36)
pode ser porque estou tentando inserir so uma coluna em uma tabela que tem mais colunas?[/quote]
Creio que não tem nada a ver com tentar colocar valores em só uma coluna, o problema é antes disso.
Tenta assim:
package Conexao_banco;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
private static Connection con;
public static Connection createConnection() throws SQLException{
String driver = "org.postgresql.Driver";
String user = "postgres";
String senha = "postgres";
String url = "jdbc:postgresql://localhost:5432/teste_dao";
try
{
Class.forName(driver);
con = null;
con = DriverManager.getConnection(url, user, senha);
System.out.println("Conexão realizada com sucesso.");
return con;
}
catch (ClassNotFoundException ex) {
System.err.print(ex.getMessage());
}
}
}
aí, vamo ao próximo erro.
Sua conexão foi feita com sucesso.
Seu problema agora é aqui:
[code]PreparedStatement ps = con.prepareStatement(“insert into table pessoa (cod_cliente) values (?)”);
ResultSet rs = ps.executeQuery();
if (rs.next()){
System.out.println(“Existe Registro”);
}
ps.setString(1, cod_cliente); [/code]
você cria um ps com aquele insert bacana ali, e no values tu coloca um (?).
na sequência tu manda executar o ps.
mas ele vai executar o insert com que parâmetro, se você só passa ele no final com o ps.setString(…)
é exatamente o que ele tá reclamando na exceção:
outra coisa, se tua tabela tem mais colunas, acho que tu vai ter que passar elas ali, caso elas não sejam nuláveis.
[quote=Guilherme Tsubauchi]aí, vamo ao próximo erro.
Sua conexão foi feita com sucesso.
Seu problema agora é aqui:
[code]PreparedStatement ps = con.prepareStatement(“insert into table pessoa (cod_cliente) values (?)”);
ResultSet rs = ps.executeQuery();
if (rs.next()){
System.out.println(“Existe Registro”);
}
ps.setString(1, cod_cliente); [/code]
você cria um ps com aquele insert bacana ali, e no values tu coloca um (?).
na sequência tu manda executar o ps.
mas ele vai executar o insert com que parâmetro, se você só passa ele no final com o ps.setString(…)
é exatamente o que ele tá reclamando na exceção:
outra coisa, se tua tabela tem mais colunas, acho que tu vai ter que passar elas ali, caso elas não sejam nuláveis.[/quote]
Pois é, acho que ele criou esse código pra verificar se tinha dados na tabela, mas acho que você só pode fazer isso com SELECT, remove o executeQuery(); e deixa apenas o executeUpdate();