Cadastrando dados no POSTGRE

Boa tarde galera,
alguem pode me passar um tutorial ou me explicar como que eu faço para gravar dados de um formulario JSP no POSTGRE.

Já procurei na net e não achei (o unico que parecia ter alguma informação era o javafree.org, mas nao esta abrindo)

Abraços

Sua duvida é em relação ao JSP ou ao SQL para gravar dados no banco?

resumindo um exemplo

no html/jsp vc cria um form q recebe os dados e então os passa a um servlet q salva no banco (metodo doPost()) e redireciona para a jsp que exibirá esses dados, caso sejam exibidos

qq coisa posta ae!

da forma que vc flow =)

o form passa os dados ao servlet que salva no banco de dados.

Blz, mas oq vc ja fez? onde empacou?
poste suas dúvidas de uma maneira mais precisa, assim todos podem ajudar!
:wink:

entao vamos lá

package br.com.fiskslo.db

Conexao.java

package br.com.fiskslo.db;

import java.sql.*;

public class Conexao {
	public static String status = "";
	public static Connection obterConexao() {
		Connection con = null;
		try {
			Class.forName("org.postgresql.Driver").newInstance();
			String url = "jdbc:postgresql://127.0.0.1:5432/postgres";
			con = DriverManager.getConnection(url, "postgres", "852852");
			status = "conexao ok";
		} catch (SQLException e) {
			status = e.getMessage();
		} catch (ClassNotFoundException e) {
			status = e.getMessage();
		} catch (Exception e) {
			status = e.getMessage();
		}
	return con;
	}

}

Usuarios.java

package br.com.fiskslo.db;

import java.sql.*;

public class Usuarios {
	int idusuario = 0;
	String nome = "";
	String login = "";
	String senha = "";
	String status = "";
	
	public void setIdusuario (int idusuario) {
		this.idusuario = idusuario;
	}
	public int getIdusuario () {
		return this.idusuario;
	}
	public void setNome (String nome) {
		this.nome = nome;
	}
	public String getNome() {
		return this.nome;
	}
	public void setLogin (String login) {
		this.login = login;
	}
	public String getLogin() {
		return this.login;
	}
	public String getStatus () {
		return this.status;
	}
	
	
	public void incluirUsuario() {
		String q = "";
		q += "insert into loja.usuarios (idusuario, nome, login)";
		q += "values ('" + idusuario + "', '" + nome + "', '" + login + "')";
		
		Connection con = Conexao.obterConexao();
		try {
			Statement st = con.createStatement();
			st.executeUpdate(q);
			status = ("Usuario " + nome + " incluido com sucesso!");
		} catch (SQLException e) {
			status = e.getMessage();
		}
		
	}

}

dentro de WebContent esta a

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Cadastra usuario</title> </head> <body> <jsp:useBean id="u" class="br.com.fiskslo.db.Usuarios" /> <jsp:setProperty name="u" property="*" /> <form method="post"> <table width="300" border="0"> <tr bgcolor="whitesmoke"> <td width="100"></td> <td width="200"></td> </tr> <tr> <td align="rigth">Id: </td> <td><input type="text" name="idusuario"></td> </tr> <tr> <td align="rigth">Nome: </td> <td><input type="text" name="nome"></td> </tr> <tr> <td align="rigth">Login: </td> <td><input type="text" name="login"></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" name="incluir" value="Cadastrar"></td> </tr> </table> </form> <% if(request.getParameter("incluir") != null) { u.incluirUsuario(); } %> <table bgcolor="whitesmoke" width="300" border = "0"> <tr> <td>Status: </td> <td><jsp:getProperty name="u" property="status" /></td> </tr> </table> </body> </html>

esta retornando o seguinte erro:

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: Exception in JSP: /index.jsp:37

34: 	</form>
35: 	<%
36: 		if(request.getParameter("incluir") != null) {
37: 			u.incluirUsuario();
38: 		}
39: 	%>
40: 	<table bgcolor="whitesmoke" width="300" border = "0">


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
	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

java.lang.NullPointerException
	br.com.fiskslo.db.Usuarios.incluirUsuario(Usuarios.java:42)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:90)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
	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)

Alguém sabe aonde eu errei?

Eu demorei um pouco pra entender essa sua jsp … rss
sinceramente eu recomendaria vc usar um servlet pra cadastrar o usuario e entao so devolver o resultado pra jsp … desse jeito ta tudo na jsp, html, taglib, logica etc!!!

mas pelo stacktrace o método incluir usuario esta gerando nullpointer na linha 42

Statement st = con.createStatement(); 

da uma olhada no codigo que obtem a conexão pois provavelmente não eá conectando e devolve null pra sua Connection, a nullpointer ocorre quando vc chama o metodo createStatement() na con que está null

Se possível, dê uma lida sobre MVC e descubra que usar scriplets pode cheirar mau.

:wink:

Isso é verdade Guilheme, eu percebi depois que comecei a ver o JSF e JSTL eu percebi que usando scriptlets é “sujar” muito o código.

E quanto à dúvida do rapaz, eu com certeza, assim como todos que responderam o tópico, utilizaria a passagem dos dados (Strings) através de um Servlets.

Abs.

bom… eu reformulei o codigo…
agora a Jsp passa os dados para um Class…, o Class é responsavel por cadastrar os dados no banco de dados… e enviar o resultado para a Jsp…

So que a função que o Class está fazendo é a mesma que um servlet iria fazer… o que eu ganho em trocar o Class por um servlet?