Retornar dados para formulário usando banco MySQL

19 respostas
marcos.menezes

Caros amigos,

Estou a desenvolver um pequeno formulário web com as 4 operações de Banco. (update, insert, delete, select).
O formulário está criado (conforme anexo) e a função insert está funcionando.
Estou parado na função select que deverá ter o formulário preenchido novamente com os valores do banco de dados.
O problema que além de não retornar eu não to conseguindo passar o "jtextfield" do html com o código.

Anexo print da pequena tela e o codigo .java

Obrigado a todos.

public class Produtos
{	
	int idcategoria, idproduto = 0;
	String codigo, produto, estoque, status = "";

        // set and get

        public void buscarProduto()
	{
		String q = "";
		q += " select idcategoria, codigo, produto, estoque";
		q += " from produtos where codigo = "+codigo;
		
		Connection con = Conexao.obterConexao();
		try
		{
			Statement st = con.createStatement();
			st.executeUpdate(q);
			status = "Produto " +codigo+ " encontrado.";
		}
		catch(SQLException e)
		{
			status = "Não foi possível buscar o produto com o código informado.";
		}
	}

}

Página .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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Incluir produtos</title>
	</head>
	
	<body>
		<jsp:useBean id="p" class = "wincomp.Produtos"></jsp:useBean>
		<jsp:setProperty property="*" name="p"/>		
		<h3>Formulário Inclusão de Produtos</h3>
		<form method = "post">
			<table width="250" border = "0">
				<tr bgcolor = "">
					<td width = ""></td>
					<td width = ""></td>
				</tr>
				
				<tr>
					<td align = "left">ID Categoria:</td>
					<td>
						<select name = "idcategoria">
							<option value = ""></option>
							<option value = "1">Hardware</option>
							<option value = "2">Software</option>							
						</select>					
					</td>
				</tr>
				
				<tr>
					<td align = "left">Código:</td>
					<td><input type = "text" name = "codigo"></td>
				</tr>
				
				<tr>
					<td align = "left">Produto:</td>
					<td><input type = "text" name = "produto"></td>
				</tr>
				
				<tr>
					<td align = "left">Estoque:</td>
					<td><input type = "text" name = "estoque"></td>					
				</tr>
				
				<tr>
					<td colspan = "2" align = "left"><input type = "submit" name = "incluir" value = "Incluir"></td>
					<td colspan = "2" align = "left"><input type = "submit" name = "buscar" value = "Buscar"></td>														
				</tr>							
			</table>
		</form>
		<%
			if (request.getParameter("incluir") != null)
			{
				p.incluirProduto();
			} else
				if (request.getParameter("buscar") != null){
					p.buscarProduto();					
				}
		%>
		<table bgcolor = "" width = "300" border = "0">
			<tr>
				<td>Status:</td>
				<td><jsp:getProperty property="status" name="p"/></td>
			</tr>		
		</table>		
	</body>
</html>

Obs: Quero trocar esses botões enormes da tela por link de acesso, se puderem me ajudar a como "chamar" a função certa após clicar no link, ficaria melhor.

Obrigado!

19 Respostas

marcos.menezes

Caros amigos,

Estou a melhorar esse meu pequeno formulario de acesso ao banco e to novamente travado.

Consigo incluir normalmente e quando vou buscar o metodo ResultSet está retornado NULL embora tenha dados gravados no banco.
ALguem me ajuda??

public void buscarProduto()
	{
		String q = "";
		q += " select idproduto, idcategoria, codigo, produto, estoque ";		
		//q += " select * from produtos ";
		q += " where codigo = '"+ codigo +"' ";
		
		Connection con = Conexao.obterConexao();
		
		try
		{
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery(q);			
			while (rs.next())
			{				
				idproduto = rs.getInt(1);
				idcategoria = rs.getInt(2);
				codigo = rs.getString(3);
				produto = rs.getString(4);
				estoque = rs.getInt(5);
			}
			status = "Produto " + codigo + " encontrado.";
			rs.close();
			st.close();
		}
		catch(SQLException e)
		{
			status = "Não foi possível buscar o produto com o código informado.";
		}

Formulario de retorno com as informações.

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Busca de Produto</title>		
		<jsp:useBean id="p" class = "wincomp.Produtos"></jsp:useBean>
		<jsp:setProperty property="*" name="p"/>
	</head>
	
	<body>
		<h3>Resultado da busca do Produto</h3>
		<hr>
		<table width = "300" border = "0">			
			<tr>
				<td>ID Produto:</td>
				<td><jsp:getProperty property="idproduto" name="p"/></td>			
			</tr>
			
			<tr>
				<td>ID Categoria:</td>
				<td><jsp:getProperty property="idcategoria" name="p"/></td>			
			</tr>
			
			<tr>
				<td>Código:</td>
				<td><jsp:getProperty property="codigo" name="p"/></td>			
			</tr>
			
			<tr>
				<td>Produto:</td>
				<td><jsp:getProperty property="produto" name="p"/></td>			
			</tr>
			
			<tr>
				<td>Estoque:</td>
				<td><jsp:getProperty property="estoque" name="p"/></td>			
			</tr>
		
		</table>
				
	</body>
</html>

Codigo java do formulário de inclusão conforme pode ser visto em anexo.

<%
			if (request.getParameter("incluir") != null)
			{
				p.incluirProduto();
			} else if (request.getParameter("buscar") != null)
				{
					p.buscarProduto();
					response.sendRedirect("buscaproduto.jsp");
				}
		%>

Obrigado a quem estiver disponivel.. :)

ErickRAR

Falta o “From” no seu Select.

marcos.menezes

Erick, boa tarde,

Rapaz, mesmo com o from ainda não funciona, parece mentira, eu namoral, não consigo pensar mais.

q += " select idproduto, idcategoria, codigo, produto, estoque from produtos";
osaragao

Como está a estrutura da sua tabela??
posta ela por favor…

marcos.menezes

Olá,

Segue em anexo a tabela.


osaragao

Já tenteou assim sem o where, o seu código pode estar vindo vazio, por isso não retorna nada!

public void buscarProduto()  
    {  
        String q = "";  
        q += " select idcategoria, codigo, produto, estoque  from produtos ";          
          
        Connection con = Conexao.obterConexao();  
        try  
        {  
            Statement st = con.createStatement();  
            st.executeUpdate(q);  
            status = "Produto " +codigo+ " encontrado.";  
        }  
        catch(SQLException e)  
        {  
            status = "Não foi possível buscar o produto com o código informado.";  
        }  
    }

:smiley:

marcos.menezes

Caro amigo,

Mesmo assim, ainda não funcionou.

marcos.menezes

Caros amigos,

Quem puder me ajudar agradeço!

OBG.

ErickRAR

Coloque e.printStackTrace(); no catch para saber qual é o erro e poste-o aqui.

marcos.menezes

Fala ai Erick.

Segue.

java.sql.SQLException: Can not issue SELECT via executeUpdate().
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1705)
	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1665)
	at wincomp.Produtos.buscarProduto(Produtos.java:117)
	at org.apache.jsp.inclusaoproduto_jsp._jspService(inclusaoproduto_jsp.java:129)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
ErickRAR

Ah, não se usa executeUpdate para fazer SELECT. O correto é usar o ResultSet

String querty = "sua query"
try {
                        con = Conexao.obterConexao();
			stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
List<Produto> produtos = new ArrayList<Produtos>();
			while (rs.next()) {
				//preenche o objeto produto e coloca na lista
			}
			

		} catch(SQLException ex) {
			e.printStackTrace(); 
		}finally{
               stmt.close();
			con.close();
                  }
marcos.menezes

Fala ai Erick,

Ainda erro.

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'query' at line 1
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.Util.getInstance(Util.java:386)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2677)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2627)
	at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1556)
	at wincomp.Produtos.buscarProduto(Produtos.java:124)
	at org.apache.jsp.inclusaoproduto_jsp._jspService(inclusaoproduto_jsp.java:129)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Metodo de Busca do Produto

public void buscarProduto() throws Throwable
	{
		String q = "";
		q += " select idproduto, idcategoria, codigo, produto, estoque from produtos";		
		//q += " select * from produtos ";				
		q += " where codigo = '"+ codigo +"' ";		
		
		Connection con = null;
		Statement st = null;
		String query = "query";
		try
		{
			//Statement st = con.createStatement();
			//st.executeUpdate(q);
			con = Conexao.obterConexao();
			st = con.createStatement();			
			ResultSet rs = st.executeQuery(query);
			List<Produtos> produtos = new ArrayList<Produtos>();
			while (rs.next())
			{				
				idproduto = rs.getInt("idproduto");
				idcategoria = rs.getInt("idcategoria");
				codigo = rs.getString("codigo");
				produto = rs.getString("produto");
				estoque = rs.getInt("estoque");
			}
			status = "Produto " + codigo + " encontrado.";			
		}
		catch(SQLException e)
		{
			e.printStackTrace();
			//status = "Não foi possível buscar o produto com o código informado.";
		}
		finally
		{
			st.close();
			con.close();
		}
	}
ErickRAR

Amigão, Query é o seu select!

String query =  "Select idproduto, idcategoria, codigo, produto, estoque FROM produtos";
....//aquelas outras linhas

List<Produtos> produtos = new ArrayList<Produtos>();  
 Produto p = null;
            while (rs.next())  
            {           
                 p =  new Produto();
                 p.setIdProduto(rs.getInt("idproduto"));
                  ...//faz isso para todos os campos
                 p.setEstoque(rs.getInt("estoque"));
                 produtos.add(p);
            }

Se for usar o WHERE para retornar apenas uma linha, procure aqui no fórum por PreparedStatement.

marcos.menezes

Caraca,

Tá Foda!

Erick, Obrigado pela sua ajuda não sei se está correto, provavelmente não, não da mais erro, compensação o retorno é 0 pra int e null pra String, e tem informações no banco, o Incluir tá funcionando.

Código abaixo.

public void buscarProduto() throws Throwable
	{
		//String q = "";
		//q += " select idproduto, idcategoria, codigo, produto, estoque from produtos";		
		//q += " select * from produtos ";				
		//q += " where codigo = '"+ codigo +"' ";		
		
		Connection con = null;
		Statement st = null;
		String query = "select idproduto, idcategoria, codigo, produto, estoque from produtos";
		try
		{
			//Statement st = con.createStatement();
			//st.executeUpdate(q);
			con = Conexao.obterConexao();
			st = con.createStatement();			
			ResultSet rs = st.executeQuery(query);
			List<Produtos>produtos = new ArrayList<Produtos>();
			Produtos p = null;
			while (rs.next())
			{				
				p = new Produtos();
				p.setIdproduto(rs.getInt(1));
				p.setIdcategoria(rs.getInt(2));
				p.setCodigo(rs.getString(3));
				p.setProduto(rs.getString(4));
				p.setEstoque(rs.getInt(5));
				
				produtos.add(p);
			}
			status = "Produto " + codigo + " encontrado.";			
		}
		catch(SQLException e)
		{
			e.printStackTrace();
			//status = "Não foi possível buscar o produto com o código informado.";
		}
		finally
		{
			st.close();
			con.close();
		}
	}
ErickRAR

Poste o que imprime o e.printStackTrace();

marcos.menezes

Erick,

Agradeço voce mais eu vou ver isso depois em casa.

Eu to no trabalho e to ocupado agora.

Mas te agradeço!

Já te adianto.

Existem 3 jsp.

Incluir Produto, Buscar Produto, Alterar Produto.

Na tela incluir ao clicar em incluir BLZ inclui.
Na mesma tela incluir quando eu coloco o codigo e clico em buscar a tela buscarproduto.jsp me retorna os valores zerados ou nulos.
Agora não tá mais dando erro no e.printStackTrace, só tá retornando vazio.

Em casa vou ver isso… OBG.

ErickRAR

Beleza. Teste a query direto no banco de dados e veja se retorna algo.

marcos.menezes

Fala meu amigo, bom dia,

A Query funciona, o que não retorna são os valores AINDA. (:
Tá demais!

marcos.menezes

pra voltar pra primeira pagina.

Criado 18 de julho de 2012
Ultima resposta 2 de ago. de 2012
Respostas 19
Participantes 3