estou fazendo um programinha simples pra web (html+jsp+ .java)
*o cara digita o nome num input de html…
*esse nome vai para um atributo ‘nome’ em uma classe pessoaBean.java…
*em seguida, esse atributo nome da classe pessoaBean.java vai para uma tabela no mysql
pelo que vi na tela do tomcat, esta dando um erro na hora de conectar com o banco , ele entra no try e logo em seguida cai no catch
abaixo esta o método de conexao com o banco:
[code]
public Connection connReturn() {
Connection conn = null;
try {
System.out.println("******entrou no Factory metodo Connection try");
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/jsp",
"root", "");
System.out.println("conexao efetuada =)");
} catch (Exception e) {
System.out.println("******entrou no Factory metodo Connection catch");
System.out.println("erro na conexao " + e.getMessage());
}
return conn;
}[/code]
[color=red]
alguem consegue indentificar o que esta errado? [/color]
(eu ja adicionei o jar do conector do mysql no projeto, estou conseguindo inserir dados na tabela atraves de uma classe de teste (que nao usa o html e jsp))
Esta dando null, verifique o valor que esta vindo( Eu normalmente ponho print pra ter certesa do que esta vindo, mas provavelmente deve estar null, verifique o método setNome(String var) da sua classe pessoaBean…
[quote=Romeo]Pelo erro parece estar realmente nesta linha
ps.setString(1,pess.getNome());
Esta dando null, verifique o valor que esta vindo( Eu normalmente ponho print pra ter certesa do que esta vindo, mas provavelmente deve estar null, verifique o método setNome(String var) da sua classe pessoaBean…[/quote]
fiz isso: puis um println getNome() la em cima da linha:
ps.setString(1,pess.getNome())
System.out.println("o nome vindo do Beans é:"+ pess.getNome());
resultado:
qnd eu insiro um nome na tabela via classe de teste , aparece td certo…
qnd tento inserir via formulario html, ele nao exibe o print (ele da erro antes dessa parte) eu acho que é a conexao…estou mandando uma foto da estrutura do meu programa, o conector esta no lugar certo?? (ou do jeito que esta, soh funciona como programa de desktop msm, em aplicações web ele deve ser adicionado de uma outra forma???)
[quote=Romeo]O problema ta na linha de codigo mesmo, olhando de novo ele não entra na mensagem “**********parte3”, então com certeza é nessa linha…
ps = conn.prepareStatement("insert into tabnome (nome) values (?)");
o PreparedStatement esta certo, então o erro é no conn
Vi que vc pega a conexão na classe Factory com o método connReturn(), verifique (imprimindo mesmo) o que esta retornando ( em formato String ).
Poe aqui o que esta retornando…[/quote]
no meu método inserir , inclui uma linha pra mostrar o que retorna la da classe de conexao:
conn = f.connReturn();
System.out.println("o conn retorna:" + conn);
mas ele nao retorna, ele nao ‘completa’ a conexao acho0 que o erro esta nessas linhas:
em alguns tutoriais esse endereço (“com.mysql.jdbc.Driver” ) esta diferente : no tutorial esta assim:
Class.forName([color=red] “org.gjt.mm.mysql.Driver”[/color]);
[quote] em alguns tutoriais esse endereço (“com.mysql.jdbc.Driver” ) esta diferente : no tutorial esta assim:
Class.forName( “org.gjt.mm.mysql.Driver”);
o que faz essa linha? [/quote]
Essa linha informa qual a classe do Driver e o carrega.
Quanto ao erro, esta realmente em uma destas linhas, vou postar os possíveis erros:
1 - O endereço da classe do driver esta errado, mas como o eclipse compilou deve estar certo…
2 - Os parametros passados para fazer a conexão podem estar errados
dbc:mysql://localhost/jsp",“root”, “”
lembrando que quando vc poe localhost ou localhost:3306 da no mesmo, pois essa é a porta padrão, verifique no mysql se é ela mesmo.
jsp tem que ser o nome da Table
O Mysql tem que ter um usuario “root” sem senha.
Para indentificar melhor o erro, ao invés de por uma Exception e no catch, use uma SQLException e
Obs: depois não precisa imprimir, use e.printStackTrace(); que ela ja imprime, e fala qual o erro detalhadamente
[quote=Romeo][quote] em alguns tutoriais esse endereço (“com.mysql.jdbc.Driver” ) esta diferente : no tutorial esta assim:
Class.forName( “org.gjt.mm.mysql.Driver”);
o que faz essa linha? [/quote]
Essa linha informa qual a classe do Driver e o carrega.
Quanto ao erro, esta realmente em uma destas linhas, vou postar os possíveis erros:
1 - O endereço da classe do driver esta errado, mas como o eclipse compilou deve estar certo…
2 - Os parametros passados para fazer a conexão podem estar errados
dbc:mysql://localhost/jsp",“root”, “”
lembrando que quando vc poe localhost ou localhost:3306 da no mesmo, pois essa é a porta padrão, verifique no mysql se é ela mesmo.
jsp tem que ser o nome da Table
O Mysql tem que ter um usuario “root” sem senha.
Para indentificar melhor o erro, ao invés de por uma Exception e no catch, use uma SQLException e
Obs: depois não precisa imprimir, use e.printStackTrace(); que ela ja imprime, e fala qual o erro detalhadamente[/quote]
aparentemente esta certo a linha de sql…!! (veja a imagem)…
Então, aparentemente em código esta tudo certo, o jeito é tentar uma outra coisa que me veio em mente…
Vc colocou o driver do mysql dentro da pasta EXT ou LIB certo?
Se sim, tente fazer deste outro jeito pois uma vez aconteceu o mesmo comigo.
Deixando ele desta forma de biblioteca não funcionava mas quando o coloquei como um jar externo funcionou, é só por o jar dentro da sua pasta do workspace e no gerenciador de classpatch adicionar “Add External Jar”, ai ele vai aparecer só como um vazinho, diferente do JRE, que tem um desenho diferente.
Abra o jar pelo package explorer e verifique se os nomes das pastas correspondem ao que vc colocou no código
Li agora o código e vi os screens. O erro com certeza está na Connection.
Partindo da tua classe que usa a conexão. Primeiramente ela chama o Factory.connReturn(). Esse método exibe no prompt a mensagem de que está entrando no try, mas não exibe a mensagem de “Conexão efetuada”, isso pq ocorreu um erro, claro. O método é quase totalmente coberto por um try/catch, o que faz com que mesmo ocorrendo erro, a aplicação não deixe de executar. Então o catch do connReturn() imprime a mensagem de erro e continua executando. Ao chamar o método inserir(), ele vai executando normal, inclusive exibe a mensagem de que entrou no try do método. Entretanto, ele só imprime no prompt o texto “**********parte 2”, que é um código localizado numa linha imediatamente anterior à chamada do prepareStatement(), o que comprova que o problema está sendo um NullPointer no retorno do Factory.connReturn().
O que você tem de fazer é copiar exatamente essas linhas
[quote=Yky Mattshawn]Li agora o código e vi os screens. O erro com certeza está na Connection.
Partindo da tua classe que usa a conexão. Primeiramente ela chama o Factory.connReturn(). Esse método exibe no prompt a mensagem de que está entrando no try, mas não exibe a mensagem de “Conexão efetuada”, isso pq ocorreu um erro, claro. O método é quase totalmente coberto por um try/catch, o que faz com que mesmo ocorrendo erro, a aplicação não deixe de executar. Então o catch do connReturn() imprime a mensagem de erro e continua executando. Ao chamar o método inserir(), ele vai executando normal, inclusive exibe a mensagem de que entrou no try do método. Entretanto, ele só imprime no prompt o texto “**********parte 2”, que é um código localizado numa linha imediatamente anterior à chamada do prepareStatement(), o que comprova que o problema está sendo um NullPointer no retorno do Factory.connReturn().
O que você tem de fazer é copiar exatamente essas linhas
comedor_de_folhas, concordando com a hipótese do usuário acima, estou te passando uma classe bem simples, execute-a e então imprima aqui a nós o erro gerado.