Boa tarde pessoal
Estou tentando fazer um cadastro usando java no postgresql. Porém está dando a seguinte msg:
Caused by: java.lang.NullPointerException
o que acontece é que a linha que dá esse erro é essa:
cst = conect.con.prepareCall("INSERT INTO dbsinan.tb_notificacao(nu_notificacao,dt_notificacao) values(?,?);
Já fiz debug e os dados nu_notificação e dt_notificação está chegando corretamente dessa forma:
cst.setString(1, f.getNu_notificacao());
cst.setDate(2, new java.sql.Date(f.getDt_notificacao().getTime()));
Segue abaixo a conexão com DB:
try {
Class.forName("org.postgresql.Driver");
conPostgres = DriverManager.getConnection("jdbc:postgresql://10.8.0.105:5445/sinanpop51", "postgres", "");
// con = DriverManager.getConnection("jdbc:postgresql://192.168.1.19:5445/sinanpop51", "postgres", "");
System.out.println("SINOMP - Postgresql ConnectON: " + conPostgres);
} . . .
faça um debug do seu código e veja se os valores que você está tentando salvar realmente estão nas variáveis.
java.lang.NullPointerException
este erro acontece quando não tem conteúdo nas variáveis ou o retorno de alguma função é nulo quando deveria retornar algo
Pois já fiz. E todos estão chegando corretamente.
Me parece ser algo no SQL. Muito estranho, não mexi e semana passada estava cadastrando.
já verificou se sua aplicação realmente está conectada ao banco de dados?
não seria
cst = conect.con.prepareStatement("INSERT INTO dbsinan.tb_notificacao(nu_notificacao,dt_notificacao) values(?,?)");
prepareCall é para executar Stored Procedure (SP)
Faz sentido. tente conect.con.preparedStatement("…");
Segue a resposta na hora da conexão: org.postgresql.jdbc4.Jdbc4Connection@44e91c07
Vou testar usando java.sql.PreparedStatement
né mesmo… e concordo com vc verifique qual o retorno do seu DriverManager ele pode dar dando nullpointer e vc num estar percebendo
zicky23
Agosto 30, 2017, 7:11pm
#10
Certo. Vou testar e posto aqui o resultado
obrigado pela ajuda de vcs
zicky23
Agosto 30, 2017, 7:16pm
#11
Bahhh… Mesma coisa.
Segue a msg de erro:
Postgresql ConnectON: org.postgresql.jdbc4.Jdbc4Connection@34ec2c16
Postgresql ConnectON: org.postgresql.jdbc4.Jdbc4Connection@231acef3
Erro postgresql: java.lang.NullPointerException
Exception in thread "Thread-8" java.lang.NullPointerException
at sinomp.cadastros.PgTbNotificacao.run(PgTbNotificacao.java:35)
ConnectON: com.mysql.jdbc.JDBC4Connection@34659228
ConnectON: com.mysql.jdbc.JDBC4Connection@339c6c67
ConnectOFF: com.mysql.jdbc.JDBC4Connection@339c6c67
at java.lang.Thread.run(Thread.java:748)
pergunto:
Será que tem a ver com a classe de cadastro estar dentro de uma Thread?
Estou chamando assim:
public boolean threadAdd(ClassNotificacao f) {
new Thread(new PgTbNotificacao(f)).start();
new Thread(new PgTbViolDom(f)).start();
return true;
}
E aqui a classe Implements Runnable
public class PgTbNotificacao implements Serializable, Runnable {
private PreparedStatement cst;
private final ConexaoDB conect = new ConexaoDB();
private final SinanNotificacao f;
public PgTbNotificacao(SinanNotificacao f) {
this.f = f;
}
@Override
public void run() {
try {
conect.openPostgreSql();
cst = conect.con.prepareStatement("INSERT INTO dbsinan.tb_notificacao("
+ "nu_notificacao,"
+ "dt_notificacao) "
+ "VALUES(?,?)");
cst.setString(1, f.getNu_notificacao());
cst.setDate(2, new java.sql.Date(f.getDt_notificacao().getTime()));
cst.execute();
cst.close();
conect.closePostgreSql();
} catch (SQLException e) {
System.err.println("erro postgres: " + e);
}
}
}
interessante é que a mensagem que você adicionou no catch não está aparecendo. “erro postgres:” deveria aparecer caso ocorresse algum erro na inserção
zicky23
Agosto 30, 2017, 7:26pm
#13
Pois é. No DEBUG ele para exatamente na linha: cst = conect.con.prepareStatement("INSERT INT....
zicky23
Agosto 30, 2017, 7:27pm
#14
To achando que é erro de conexão com DB.
ao envés de fazer uma inserção, tente fazer uma consulta e faz o debug pra ver se é retornado alguma coisa. se não der erro, iremos saber que o erro está na inserção. se der erro, verifica tua conexão e o jar do banco de dados pq provavelmente ele não estará conectando
zicky23
Agosto 30, 2017, 7:34pm
#17
Mesmo erro com um SELECT.
Então é erro de conexão mesmo. O DB não está abrindo.
Valeu pessoal vou trabalhar agora pra descobrir qual o problema…
posto aqui daqui a pouco.
Valeu
Você está instanciando a classe de conexão e chamando o método de conectar logo em seguida, certo?
Aqui não seria conect.con().prepareStatement
?
zicky23
Agosto 30, 2017, 7:42pm
#19
To usando essa versão de PostgreSQL: 9.0 (x86)
e no Maven:
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
tenho certeza q é conexão…posta sua classe de conexão…