Erro na conversao getAtributte (string) para int

Olá , pessoal: quero ver se alguém pode, por favor, me dar uma dica de como resolver isso:
eu tenho um banco de dados de teste, tabela ‘prod’ com tres campos, de tipos integer, varchar, integer (cod, descricao, quant).
Eu fiz o insert assim:

"INSERT INTO prod (cod, descricao, quant) VALUES (1, ‘coxinha’, ?)";

Onde está ‘?’, eu quero colocar qCox, que é o resultado da conversão abaixo,

String quantCox = String.valueOf(""+session.getAttribute(“quant_cox”));
int qCox = Integer.parseInt(""+quantCox);

quantCox vem de um input (form), mas não retorna os dados quando faço o select. Eu testo, colocando no lugar de ‘?’ um número qualquer, aí retorna os dados, indicando que tem algum problema nessa conversão acima. Alguém saberia me dizer o que é?

Pra que concatenar esse "" na passagem dos parâmetros?
Basta você fazer assim:

int qCox = Integer.parseInt(String.valueOf(session.getAttribute("quant_cox")));

Posta o código onde você monta e executa o PreparedStatement.

1 curtida

Olá, staroski, essa ,e a página de validação. Se os pares, checkbox e inpot estiverem preenchidos redireciona para uma página onde vou fazer o cálculo e finalizar. Por enquanto é só teste de conexão e captura dos dados. E é onde está dando problemas porque em jsp eu não tenho experiência, mas gosto porque eu trabalho com java.

<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>

<%@ page import=“java.sql.*”%>
<% int codigo;%>

JSP_Five-validar <% session.removeAttribute("quant_cox"); session.removeAttribute("select_cox"); session.removeAttribute("select_bq"); session.removeAttribute("quant_bq"); %> <% int i = 0;

String selCox = request.getParameter(“select_cox”);
String quantCox = request.getParameter(“quant_cox”);
String selBq = request.getParameter(“select_bq”);
String quantBq = request.getParameter(“quant_bq”);

%>

<%-- colocando na 'session' os campos com valores positivos --%>

<%

if(selCox != null)
{
session.setAttribute(“select_cox”, selCox);
}else{
i++;
}
if(quantCox != “” || !quantCox.equals(""))
{
session.setAttribute(“quant_cox”, quantCox);
}else{
i++;
}
if(selBq != null)
{
session.setAttribute(“select_bq”, selBq);
}else{
i++;
}
if(quantBq != “” || !quantBq.equals(""))
{
session.setAttribute(“quant_bq”, quantBq);
}else{
i++;
}

if( i == 1 || i == 3 ){

%>
i =
<%= i %>

<form action="index.jsp" method="post">
	<table width="80%" align='center'>
		<tr>
			<td colspan="5" bgcolor="#FFDAB9" style="text-align: center;">
				Tem campos não preenchidos!</td>
		</tr>
		<tr>
			<td colspan="5" bgcolor="#FFDAB9" style="text-align: center;">

				Verifique prenchimento!</td>
		</tr>

		<tr>
			<td colspan="5" align="center" bgcolor="#F4A460"><input
				type="submit" value="OK" /> <%-- <button onclick="location.href = 'PagCham.jsp';" id="myButton" class="float-left submit-button" >Calcular</button>   --%>
			</td>
		</tr>
	</table>
</form>
<% 		         
          }else
               if(i == 2 || i == 0){
   %>
<!--  aqui entra a rotina de 'delete' - para limpar os registros existentes -->

<%	try {

            	         final String URL = "jdbc:firebirdsql:localhost/3050:C:/DB/prim_db.fdb";
            	         final String usr = "sysdba";
            	         final String psw = "masterkey";

            			 Class.forName( "org.firebirdsql.jdbc.FBDriver" );
            			 
            			 final Connection connection = DriverManager.getConnection( URL,usr,psw );  
            			 final String conexao = "conectado ao banco com sucesso.";
            			 final Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
            		   	         ResultSet.CONCUR_UPDATABLE);
            			 final String query = "DELETE FROM prod"; // WHERE descricao = ' + coxinha + '";			
            			 final ResultSet rs = statement.executeQuery(query);
            		}
                    catch(SQLException ex)
                   {
                  %>
                     <%= ex.getMessage() %>
    <% 
                  }
    %>
                                      <!-- aqui entra a rotina de 'insert' -->


<%
try {
         quantBq = String.valueOf(""+session.getAttribute("quant_bq"));
   	     quantCox = String.valueOf(""+session.getAttribute("quant_cox"));
   	     int qCox = Integer.parseInt(""+quantCox);
         
         final String URL = "jdbc:firebirdsql:localhost/3050:C:/DB/prim_db.fdb";
         final String usr = "sysdba";
         final String psw = "masterkey";

		 Class.forName( "org.firebirdsql.jdbc.FBDriver" );
		 
		 final Connection connection = DriverManager.getConnection( URL,usr,psw );  
		 final String conexao = "conectado ao banco com sucesso.";
		 final Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
	   	         ResultSet.CONCUR_UPDATABLE);
		 
		 
		 
		 //int qc = Integer.parseInt(""+quantCox); 			
		
		 final String query = "INSERT INTO prod (cod, descricao, quant) VALUES (1, 'coxinha', qCox)";			
		 final ResultSet rs = statement.executeQuery(query);
	}
     catch(SQLException ex)
    {     
       ex.getMessage();	
    }         
        	  response.sendRedirect("NewFile.jsp");	        	      
                                   
                                  }else
            	                        if(i == 4)
            	                        {
  	        	                           response.sendRedirect("Branca.jsp");	        	      
  	                                    }
                            %>
<p>
<p>

E essa (abaixo) é a página onde vou finalizar pedido, fazer os cálculos. Meu problema no momento é como colocar no insert o valor que vem de um input, por recuperação de dados da sessão, conforme a postagem. obrigado por qualquer orientação.

<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>

<%@ page import=“java.sql."%>
<%@ page import="javax.swing.
”%>
<%@ page import=“java.io.*”%>

New
	</tr>
	<tr>
		<td bgcolor="#00FF00">Codigo</td>
		<td bgcolor="#00FF00">Descricao</td>
		<td bgcolor="#00FF00">Quantidade</td>
	</tr>
	<tr>
		<%
try {

     final String URL = "jdbc:firebirdsql:localhost/3050:C:/DB/prim_db.fdb";
     final String usr = "sysdba";
     final String psw = "masterkey";

	 Class.forName( "org.firebirdsql.jdbc.FBDriver" );
	 
	 final Connection connection = DriverManager.getConnection( URL,usr,psw );  
	 final String conexao = "conectado ao banco com sucesso.";
	 final Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
   	         ResultSet.CONCUR_UPDATABLE);
	 final String query = "SELECT * FROM prod"; // WHERE descricao = ' + coxinha + '";			
	 final ResultSet rs = statement.executeQuery(query);		
	  
		while(rs.next())
	    { 				
			int cod = rs.getInt("cod");
			String descricao = rs.getString("descricao");
			int quant = rs.getInt("quant");
%>
		<td bgcolor="#FFFF00"><%= cod %></td>
		<td bgcolor="#FFFF00"><%= descricao %></td>
		<td bgcolor="#FFFF00"><%= quant %></td>
<%
	        
	    }

}
      catch(SQLException ex)
     {    
    	  ex.getMessage();        
     }
 %>
 </tr>
	<tr>
		<td bgcolor="#F4A460">&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp</td>
		<td align="center" bgcolor="#F4A460">
			<button onClick="history.go(-1)" id="myButton">Voltar</button>
		</td>
		<td bgcolor="#F4A460">&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp</td>
	</tr>
</table>
Calculo

Alô, staroski e demais companheiros da programação. Enquanto esperava por alguma resposta, fiz várias tentativas e consegui inserir no banco colocando o ‘insert’ assim:

“INSERT INTO prod (cod, descricao, quant) VALUES (1, ‘coxinha’,” + qCox + “)”;

Só lembrando que antes eu recuperei como String o Attribute que estava na ‘session’ e fiz a conversão para int assim:

String quantCox = String.valueOf(""+session.getAttribute(“quant_cox”));
int qCox = Integer.parseInt(""+quantCox);

Vou continuar com o que planejei e qualquer novidade eu posto aqui. Obrigado a todos por ora.

Não é legal concatenar os parâmetros na própria query.
O ideal seria você substituir os valores dos parâmetros por ? na query, criar um PreparedStatement e então setar os parâmetros com o tipo de dado adequado.

1 curtida

Olá staroski vou pesquisar isso que você sugere, pois nunca usei, se você tiver aí um exemplo, posta prá mim aprender, mas independente disso vou pesquisar, pois quero fazer as coisas do melhor modo . E aquele lance de colocar (""+… ) antes da variável, eu uso na programação java, quando retorna alguma exceção, eu faço isso e resolve o problema, mas entendo que não deve ser regra. Obrigado pelas dicas e vou ver como é o uso do PreparedStatement e de ‘?’. Obrigado, por ora.

Quando acontece uma exceção, você deveria tratar a exceção e não fazer uma concatenação de String, não faz o menor sentido.

Tem razão staroski. Tenho que aprender muito ainda. Obrigado.