Aonde estou errado (java cadastro no banco mysql)

11 respostas
B

Boa tarde pessoal, tudo bem?

Bem, instalei o jdk, netbeans e mysql, comunico através do apache e controlo pelo wampserver, esta comunicando, eu dou um insert no banco, já vejo no netbeans e vice versa, agora através do código java, não consigo salvar dados, quando cliclo no botão “Cadastrar” ele aparece a página com códigos… aonde estou errando?

Criei o index.jsp, com direciomento para cadastro.jsp, este esta funcionando:
[color=red]<%
response.sendRedirect(“cadastro.jsp”);
%>[/color]

Criei o cadastro.jsp:
[color=red]<%–
Document : cadastro
Created on : 13/09/2010, 21:11:11
Author : aluno
–%>

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>

JSP Page
<body>
    <form method="post" action="gravar.jsp">
        nome<input type="text" name="nome" />
        <br>
        telefone<input type="text" name="telefone"/>
        <input type="submit" value="Cadastrar" />
        </form>
</body>
[/color]

Criei o gravar.jsp (Aqui criei a estrutura e o caminho para jogar a informação pro banco, so que esta errado, pois nao esta indo, lembrando que no mysql, o nome do banco é: firstsistem, da tabela: usuario e as colunas sao: usunome e usutelefone):
[color=red] <%@ page import=“java.sql.*”%>

//receber dados
    String nome = request.getParameter("nome");
    String telefone = request.getParameter("telefone");
    //processa dados

    try{
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/firstsistem","root","");
        String sql = "insert into usuario (usunome, usutelefone) values(?, ?)";
        PreparedStatement stmt = con.preparedStatement(sql);
        stmt.setString(1, nome);
        stmt.setString(2, telefone);
        stmt.executeupdate();

    }catch (Exception e){
    out.println(e.getMessage());
    }
    %>

[/color]

Quem puder me ajudar, desde já eu agradeço a atenção.

11 Respostas

luiz.portnoy

Veja se tá faltando abrir a tag de código aqui:

<%@ page import="java.sql.*"%> 

<% 
//Abriu a tag aqui <--

//receber dados 
String nome = request.getParameter("nome"); 
String telefone = request.getParameter("telefone"); 
//processa dados 

try{ 
Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/firstsistem","root",""); 
String sql = "insert into usuario (usunome, usutelefone) values(?, ?)"; 
PreparedStatement stmt = con.preparedStatement(sql); 
stmt.setString(1, nome); 
stmt.setString(2, telefone); 
stmt.executeupdate(); 

}catch (Exception e){ 
out.println(e.getMessage()); 
} 

//fechou a tag aqui
%>

Pois pelo que vi que só estava fechado embaixo…

Espero ter ajudado.

B

Ajudou sim amigão, mas agora ao tentar cadastrar esta dando:

[b]HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 11 in the jsp file: /gravar.jsp

The method preparedStatement(String) is undefined for the type Connection

8:             Class.forName(com.mysql.jdbc.Driver);

9:             Connection con = DriverManager.getConnection(jdbc:mysql://localhost:3306/firstsistem,root,"");

10:             String sql = insert into usuario (usunome, usutelefone) values(?, ?);

11:             PreparedStatement stmt = con.preparedStatement(sql);

12:             stmt.setString(1, nome);

13:             stmt.setString(2, telefone);

14:             stmt.executeupdate();
An error occurred at line: 14 in the jsp file: /gravar.jsp

The method executeupdate() is undefined for the type PreparedStatement

11:             PreparedStatement stmt = con.preparedStatement(sql);

12:             stmt.setString(1, nome);

13:             stmt.setString(2, telefone);

14:             stmt.executeupdate();

15:

16:         }catch (Exception e){

17:         out.println(e.getMessage());[/b]

Deve ter mais erros :cry:

B

Erro que acusa, eu acredito esta na linha 11:

PreparedStatement stmt = con.preparedStatement(sql);

e na linha 14:

stmt.executeupdate();

luiz.portnoy
PreparedStatement stmt = con.preparedStatement(sql);

O nome correto do método é prepareStatement :wink:

PreparedStatement stmt = con.prepareStatement(sql);
Ygor

E não esqueca de modificar esta linha;

stmt.executeupdate(); -> stmt.executeUpdate();

B

Hehehe esta caminhando, as duas dicas ai em cima, foram de extrema importância, no entanto, agora ao clicar em cadastrar, aparece a pagina gravar com a informação na tela:

com.mysql.jdbc.Driver

Acho que agora será mais dificil :frowning:

B

Hehehe esta caminhando, as duas dicas ai em cima, foram de extrema importância, no entanto, agora ao clicar em cadastrar, aparece a pagina “gravar.jsp” com a informação na tela:

com.mysql.jdbc.Driver

Não acredito que seja o banco e nem o netbeans, pois quando eu dou insert la no banco, no netbeans aparece, quando dou insert no netbeans, la no banco aparece… Acredito que seja alguma falha ou falta dentro desse arquivo gravar.jsp que coloquei nas mensagens anteriores.

Alguém consegue me ajudar?

P

Tente verifica o caminho do driver mysql e verifique se esta igual ao da pagina grava.jsp!

B

O que eu notei, é que o driver e os comandos estão todos apontados pra jdbc:mysql://localhost:3306/firstsistem, ou seja porta 3306
Mas quando eu executo ele na hora de cadastrar, no browser aparece: http://localhost:8084/sistema/gravar.jsp, ou seja a porta 8084, é assim mesmo, ou o erro esta ai?

hover

Bom vamos lah,

A primeira coisa é, não acesse o banco de dados a partir de uma JSP! No lugar dela, crie um servlet para fazer o controle da aplicação (Camada controller do MVC). Segundo, estude MVC.

Agora quanto as portas, 3306 é a porta que você vai acessar o banco de dados e 8084 é a porta que você vai acessar seu web container (tomcat, jboss, etc). De uma olhada em algum tutorial de jdbc (http://www.guj.com.br/article.show.logic?id=7) e depois aproveite a classe de acesso a dados que você criou no tutorial e chame ela do Servlet que você vai criar no lugar do gravar.jsp

P

Cara como vc é iniciante sugiro que vc crie uma classe Dao e uma classe que estenda ao Dao
Cria uma Classe q tem acesso direto e realmente procure criar um sistema MVC conforme dica anterior e nao escreva scriptlet na pagina jsp que é mau pratica de programação

cria a classe Dao e outra para acessa -la exemplo
public class GenericDao extends Dao{

      public void cadastrar(){
       
       //abre conexao
      GenericDao d = new GenericDao();
try{     
 //metodo abrirConexao vem por herança da classe Dao
    
   d.abrirConexao();
    // depois utiliza a forma como colocou no seu exemplo ,mas dentro do generic DAo

}
Criado 17 de setembro de 2010
Ultima resposta 19 de set. de 2010
Respostas 11
Participantes 5