esta retornando um erro que nao consigo entender a causa
acontece neste comando:
PreparedStatement smtm = connection.prepareStatement(sql);
observem que eu cheguei ate a por um System.out.println para marca, e mostra o sql certinho
desde ja agradeco
importjava.sql.Connection;importjava.sql.Date;importjava.sql.PreparedStatement;importjava.sql.SQLException;publicclassContatoDAO{privateConnectionconnection;publicvoidContatoDao(){this.connection=newFabricaDeConexao().getConnection();}publicvoidAdiciona(Contatocontato){System.out.println("b001");try{// preparando a sentence para insercaoStringsql="insert into contatos "+"(nome,email,endereco,datanascimento)"+" values (?,?,?,?)";System.out.println("b002 "+sql);PreparedStatementsmtm=connection.prepareStatement(sql);// o erro acontece nesta linha (java.lang.nullpointerException)//PreparedStatement smtm = connection.prepareStatement(sql);System.out.println("b003");// seta os valoresSystem.out.println("01");smtm.setString(1,contato.getNome());System.out.println("03");smtm.setString(2,contato.getEmail());System.out.println("04");smtm.setString(3,contato.getEndereco());// smtm.setDate(4, new Date(contato.getDataNascimento()// .getTimeInMillis()));System.out.println("04");smtm.setString(4,"01-01-2011");System.out.println("05");// executasmtm.execute();smtm.close();}catch(SQLExceptione){thrownewRuntimeException(e);}}}
esta retornando um erro que nao consigo entender a causa
acontece neste comando:
PreparedStatement smtm = connection.prepareStatement(sql);
observem que eu cheguei ate a por um System.out.println para marca, e mostra o sql certinho
desde ja agradeco
o erro esta descrito na propria linha no codigo…
e a conexao esta certa
alexvingg
A conexão esta certa porem o como o Renato_natos falou o construtor não está sendo construido
quando vc instancia a classe por isso ele tava dando java.lang.nullpointerException pq o objeto
connection não estava sendo construido.
mateuscs
Como Renato Falou… vc não pode colocar um metodo de conexão sem retorno
public void ContatoDao() {
this.connection = new FabricaDeConexao().getConnection();
}
Retire o void.
Dan_xD
Opa, Desculpa.
Falha minha.
Passei direto procurando o erro e não reparei direito no código.
squall926
Boa Tarde!
O Renato esta correto, você não esta chamando o ContatoDao() ; e se esta pensando que ele será chamado quando instanciar a classe, vc deve alterar o nome do metodo para:
publicContatoDAO(){.........}
pois, como esta ele não será chamado. Java é sensitive ON.
jonasjgs2
Renato_natos, se eu tiro o void
fica com erro “return type for metodo is missing”
mateuscs
squall926, não entendi sua resolução do problema.
jonasjgs2, voce tem que retornar Tipo Connection, não tipo void.
Só não esquece de adicionar o Modificador necessário.
Sem o modificador como está no código, este método não pode ser acessado de fora do pacote.
Adicione por exemplo o "public"
public static Connection getConexao()
mateuscs
Assim que solucionar, escreva resolvido no tópico
jonasjgs2
vou mostrar para vcs o projeto
cada uma das classes....
packagebr.com.jmaster;importjava.sql.*;publicclassFabricaDeConexao{publicConnectiongetConnection(){Connectioncon;System.out.println("Conectando ao banco");try{System.out.println("parece que conectou");con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"+"database=mdados","adminsql","123");System.out.println("parece que conectou");returncon;}catch(SQLExceptione){System.out.println("erro");thrownewRuntimeException(e);}}}
da o erro n ContatoDAO
do geito que esta agora a classe coloquei como Connection e deu pau
ja coloquei como void o problema e o meso
e se eu tirar o void me da um erro como explicado anteriormente
packagebr.com.jmaster;importjava.sql.Connection;importjava.sql.Date;importjava.sql.PreparedStatement;importjava.sql.SQLException;publicclassContatoDAO{privateConnectionconnection;publicConnectionContatoDao(){this.connection=newFabricaDeConexao().getConnection();returnconnection;}publicvoidAdiciona(Contatocontato){System.out.println("b001");try{// preparando a sentence para insercaoStringsql="insert into contatos "+"(nome,email,endereco,datanascimento)"+" values (?,?,?,?)";System.out.println("b002 "+sql);PreparedStatementsmtm=connection.prepareStatement(sql);// PreparedStatement smtm = connection.prepareStatement(sql);System.out.println("b003");// seta os valoresSystem.out.println("01");smtm.setString(1,contato.getNome());System.out.println("03");smtm.setString(2,contato.getEmail());System.out.println("04");smtm.setString(3,contato.getEndereco());// smtm.setDate(4, new Date(contato.getDataNascimento()// .getTimeInMillis()));System.out.println("04");smtm.setString(4,"01-01-2011");System.out.println("05");// executasmtm.execute();smtm.close();}catch(SQLExceptione){thrownewRuntimeException(e);}}}
packagebr.com.jmaster;importjava.util.Calendar;publicclassContato{privateLongid;privateStringnome;privateStringemail;privateStringendereco;privateCalendardataNascimento;publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicStringgetEndereco(){returnendereco;}publicvoidsetEndereco(Stringendereco){System.out.println("setou o endereco");this.endereco=endereco;}publicCalendargetDataNascimento(){System.out.println("Setou a data de nascimento");returndataNascimento;}publicvoidsetDataNascimento(CalendardataNascimento){this.dataNascimento=dataNascimento;}}
importjava.util.Calendar;publicclassTestaInsere{publicstaticvoidmain(String[]args){// Pronto para gravarContatocontato=newContato();contato.setNome("jonas");contato.setEmail("[email removido]");contato.setEndereco("Rua guido morandini,200");System.out.println("teste001");contato.setDataNascimento(Calendar.getInstance());System.out.println("teste002");// grave nesta conexaoSystem.out.println("teste003");ContatoDAOdao=newContatoDAO();System.out.println("teste004");dao.Adiciona(contato);System.out.println("Gravado");}}
mateuscs
Modifique a seguinte sintaxe:
System.out.println("parece que conectou");con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"+"database=mdados","adminsql","123");System.out.println("parece que conectou");
É simples, o nome da Classe dele é ContatoDAO e o metodo padrão(que não é chamado por causo do sensitive)é ContatoDao, ele não precisa retornor Connection porque é uma variavel global.
Solução:
Faça o seguinte:
packagebr.com.jmaster;importjava.sql.Connection;importjava.sql.Date;importjava.sql.PreparedStatement;importjava.sql.SQLException;publicclassContatoDAO{privateConnectionconnection;publicConnectionContatoDao(){}publicvoidAdiciona(Contatocontato){System.out.println("b001");try{this.connection=newFabricaDeConexao().getConnection();// toda vez que que quer adicionar vc obtem uma connection.// preparando a sentence para insercao Stringsql="insert into contatos "+"(nome,email,endereco,datanascimento)"+" values (?,?,?,?)";System.out.println("b002 "+sql);PreparedStatementsmtm=connection.prepareStatement(sql);// PreparedStatement smtm = connection.prepareStatement(sql); System.out.println("b003");// seta os valores System.out.println("01");smtm.setString(1,contato.getNome());System.out.println("03");smtm.setString(2,contato.getEmail());System.out.println("04");smtm.setString(3,contato.getEndereco());// smtm.setDate(4, new Date(contato.getDataNascimento() // .getTimeInMillis())); System.out.println("04");smtm.setString(4,"01-01-2011");System.out.println("05");// executa smtm.execute();smtm.close();}catch(SQLExceptione){thrownewRuntimeException(e);}finally{if(connection!=null)try{connection.close()/* porque você não estava fechando sua connection? */catch(Exceptione){}}}}
A Questão do void é que por não ser o metodo padrão realmente precisa de retorno. faz como acima que funciona… descupe pela demora, muito trabalho…