Retornar dados para formulário usando banco MySQL

19 respostas
M

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

M

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.. :)

E

Falta o “From” no seu Select.

M

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";
O

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

M

Olá,

Segue em anexo a tabela.


O

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:

M

Caro amigo,

Mesmo assim, ainda não funcionou.

M

Caros amigos,

Quem puder me ajudar agradeço!

OBG.

E

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

M

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)
E

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();
                  }
M

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();
		}
	}
E

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.

M

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();
		}
	}
E

Poste o que imprime o e.printStackTrace();

M

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.

E

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

M

Fala meu amigo, bom dia,

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

M

pra voltar pra primeira pagina.

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