Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunosinister

JSP e Banco de dados

Recommended Posts

Galera iniciei meus estudos em JSP e estou tendo um pouco de dificuladades, tento inserir dados em uma tabela, mas só aparece erro e não consigo corrigir de jeito nenhum será que alguém pode me dar uma ajuda ?

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Agenda</title>
	</head>
	<body>

	<h1>Bem vindo a Agenda</h1>
	<p></p>
	<form name="agenda" method="POST" action="inserir.jsp">
	Nome: <input type="text" name="nome" size="30"><p></p>
	Endereço: <input type="text" name="endereco" size="30"><p></p>
	DDD: <input type="text" name="ddd" size="3"><p></p>
	Telefone: <input type="text" name="telefone" size="8"><p></p>
	Email: <input type="text" name="email" size="20"><p></p>
		Observações: <textarea name="observacoes" cols="20" rows="3"></textarea>
		<p></p>
		<input type="submit" name="gravar" value="Gravar !">
		<input type="reset" name="limpar" value="Limpar !">
		
	
	</body>
</html>

agora o inserir:

<html>
	<head>
			 <title>JSP Page</title>
	</head>
	<body>
   
 
		<%@ page import= "java.sql.*"%>
<%@ 
   String nome = request.getParameter("nome");
	String endereco = request.getParameter("endereco");
	String ddd = request.getParameter("ddd");
	String telefone = request.getParameter("telefone");
	String email = request.getParameter("email");
	String observacoes = request.getParameter("observacoes");
	 
	session.setAttribute("nome",nome);
	session.setAttribute("endereco",endereco);
	session.setAttribute("ddd",ddd);
	session.setAttribute("telefone",telefone);
	session.setAttribute("email",email);
	session.setAttribute("observacoes",observacoes);
  
  try {
		   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		   Connection con = DriverManager.getConnection("jdbc:odbc:agenda","","");
		   String sql= "insert into Agenda (NOME,ENDERECO,DDD,FONE,EMAIL,OBSERVACOES) value ('nome','telefone','endereco','ddd','email','observacoes')";"
		   Statement stmt = con.createStatement();
		   ResultSet rst = stmt.executeUpdate(sql);

		   
		   
		   rst.close();
		 stmt.close();
		  con.close();
		 }
	  
		catch(Exception e)
		   { 
			 out.println("Erro");
			}
%>	
   
	
	</body>
</html>

o ODBC está configurado... desculpem a ignorancia mas é que realmente preciso aprender isso, desde já agradeço a atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na query insert substitua VALUE por VALUES se isso não te ajudou poste os erros apresentados para podermos ajudar melhor.

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_happy.gif

Aparece o seguinte:

 

 

exception

org.apache.jasper.JasperException: /agenda1/inserir.jsp(10,3) Invalid directive
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper
java:510)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

org.apache.jasper.JasperException: /agenda1/inserir.jsp(10,3) Invalid directive
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java
39)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:86)
	org.apache.jasper.compiler.Parser.parseDirective(Parser.java:515)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1552)
	org.apache.jasper.compiler.Parser.parse(Parser.java:126)
	org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
	org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:155)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que o problema seja com seu sql, em

 

String sql= "insert into Agenda (NOME,ENDERECO,DDD,FONE,EMAIL,OBSERVACOES) value ('nome','telefone','endereco','ddd','email','observacoes')";"

você não está adicionando o valor das variáveis no sql e sim o nome delas, você deve ir concatenando-as, como

 

String sql= "insert into Agenda (NOME,ENDERECO,DDD,FONE,EMAIL,OBSERVACOES) values ('"+nome+"','"+telefone+"','"+endereco+"','"+ddd+"','"+email+"','"+observacoes+"')";"

e coloque o nome dos campos exatamente como os que estão no banco.

 

Obs.: só para lembrar que essa maneira de inserir dados no banco não é uma boa prática e após conseguir inserir os dados no banco procure uma maneira mais adequada de fazê-la, como por exemplo utilizar a classe PreparedStatement que já é um pouco melhor, utilizar persistência de dados, frameworks como Hibernate.

 

falo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma boa dica é:

Antes de executar a query imprima na tela e se possível execute a manualmente no SGBD.

Isso ajuda a identificar erros na construção da string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso colocar no mesmo arquivo JSP a aplicação e a conexão com o banco!! como faço isso? alguem pode me ajudar?

Bom, eu sou nova nesses assuntos mas o q eu aprendi é que deve se separar consultas feitas no banco das páginas...

vou lhe dá um exemplo simples de uma aplicação que acho que vai atender ao q você quer...

 

1° crie uma classe de conexão com o banco

2° uma classe usuario, com seus atributos privados e metodos gets e sets.

3° crie uma classe usuariobd(nessa classe estaram suas consultas sql), com metodos de update, delete..e todos os quais você precisar.

4° uma classe de interface entre o cliente e o servidor...bom por usar o padrão fachada eu a chamo de fachada.

 

ok..lá vms nós.

suas classes

 

classe de conexão

package aula;
import java.sql.*;
import java.util.*;

/** Classe que realiza conexão com o banco de dados
 * Neste exemplo é mostrado para um conexão com o Banco de Dados Firebird. Pode-se passar o nome ou o IP para identificar o servidor.
 */
public class Conexao{
	/** Para habilitar no Windows.*/
	//String jdbc="jdbc:firebirdsql:localhost/3050:C:\\exemplo.gdb";
	
	//Exemplo para Linux
	String jdbc="jdbc:mysql://localhost/bdaula";
	
	
	/** Informa a conexao por ODBC
	 * String odbc = "jdbc:odbc:MeuBanco";
	 */
	private String usuario = "root";
	private String senha = "";
	Statement st;
	Connection conexao;
	private String msg="";
	private String sql=null;
	ResultSet rs=null;
	
	
	/** Construtor default */
	public Conexao() {
		try{
			Class.forName("com.mysql.jdbc.Driver");
			this.conexao = DriverManager.getConnection(jdbc,usuario,senha);
			this.st = this.conexao.createStatement();
			this.msg="Conexão estabelecida com exito !\n";
		}
		catch(ClassNotFoundException e) {
			this.msg="Driver JDBC-ODBC não encontrado!.Verifique a classe do Driver";
			getmsg();
		}
		catch(SQLException e) {
			this.msg="Problemas na conexao com a fonte de dados,verifique o SQL passado.";
			getmsg();
		}
	}
	
	/** Método para imprimir no console */
	public void getmsg(){
		System.out.println(this.msg);
	}
	
	
	/**Método para retornar a variável de menagem*/
	public String getMsg(){
		return this.msg;
	}
	
	
	public void fecharConexao()throws SQLException{
		try{
			this.st.close();
			this.conexao.close();
		}catch(SQLException e){
			this.msg="Não foi possível fechar a conexao";
			getmsg();
			e.printStackTrace();
		}
	}
	
	
	public Connection getConexao() {
		return conexao;
	}
	
}
classe usuario.

 

package aula;

public class Usuario 
{
	private String login;
	private String  senha;
	private String nome;
	
	public Usuario()
	{		
	}

	public void setLogin(String login)
	{
		this.login=login;
	}
	public void setSenha(String senha)
	{
		this.senha=senha;
	}
	public void setNome(String nome)
	{
		this.nome=nome;
	}
	
	public String getLogin()
	{
		return login;
	}
	public String getSenha()
	{
		return senha;
	}
	public String getNome()
	{
		return nome;
	}
}
classe usuariobd

 

package aula;

import java.sql.*;
import java.util.*;
public class UsuarioBD {
	private String sql=null;
	private String msg=null;
	private Conexao conexao;
	private Usuario usuario;
	private Vector vetUsuario;
	
	
	/** Método construtor sem parametros */
	public UsuarioBD() {
		this.conexao=new Conexao();
	}
	
	public void msg(){
		this.msg=this.msg+this.conexao.getMsg();
		System.out.println(this.msg);
	}
	
	public String getMsg(){
		this.msg=this.msg+this.conexao.getMsg();
		return this.msg;
	}
public boolean setUsuario(char operacao,Usuario usuario)throws SQLException{
		String login = usuario.getLogin();
		String senha = usuario.getSenha();
		String nome = usuario.getNome();
		
		switch(operacao){
			case 'I':
				this.sql="insert into usuario(nome,login,senha) values('"+nome+"','"+login+"','"+senha+"')";
				break;
				
			case 'U':
				this.sql="update usuario set senha='"+senha+"',nome='"+nome+"' where login='"+login+"'";
				break;
				
			case 'D':
				this.sql="delete from usuario where login='"+login+"'";
				break;
				
			default:this.sql="";
		}
		try {
			this.conexao.st.executeUpdate(this.sql);
			System.out.println("SQL="+this.sql);
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			this.msg="Erro="+e.getMessage();
			return false;
		}
	}

classe fachada

package aula;
import java.util.Vector;
import java.sql.*;
public class Fachada 
{
	private String msg=null;
	private UsuarioBD ubd;
	private AmostraBD abd;
	public Fachada()
	{		
	}
	
	public void getmsg()
	{
		System.out.print(this.msg);
	}
	public String getMsg()
	{
		return this.msg;
	}
public boolean setUsuario(char operacao,Usuario usuario)throws SQLException
	{
		this.ubd= new UsuarioBD();
		if(ubd.setUsuario(operacao,usuario))
			return true;
		else
			return false;
	}
essa é a página que recebe os dados do teu formulário

<jsp:useBean id="fachada" class="aula.Fachada"/>
<jsp:useBean id="usuario" class="aula.Usuario"/>
<%
String login=request.getParameter("login");
String senha=request.getParameter("senha");
String nome=request.getParameter("nome");
usuario.setLogin(login);
usuario.setSenha(senha);
usuario.setNome(nome);
if(fachada.setUsuario('I',usuario))
{
%>
<h2><%=usuario.getNome()%> Cadastrado com Sucesso</h2>
<%
}else
{
%>
<h2><%=usuario.getNome()%> já está cadastrado</h2>
<%
}
%>

Lembrete:as classes pertencem ao mesmo pacote e ficam dentro do diretório classes da web-inf da sua aplicação..não esqueça do conector mysl dentro da pasta lib da aplicação ou do servidor.

Não esqueça de importar o pacote da sua classe para dentro da sua página jsp (cad.jsp).

<%@page import="aula.*" %>

 

É isso espero que tenha lhe ajudado um pouquinho

att

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso com certeza ja ajuda bastante, mas se você não quer e não devia ter código espaguete nas páginas, utilize JSTL..

 

Flwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.