Foros del Web » Programación para mayores de 30 ;) » Java »

novata implora auxilio

Estas en el tema de novata implora auxilio en el foro de Java en Foros del Web. hola ojala pueda haber alguien q se apiade de mi ignorancia :( soy muy nueva en esto y mi caso es el siguiente: tengo el ...
  #1 (permalink)  
Antiguo 14/09/2010, 11:05
Avatar de sanchezg  
Fecha de Ingreso: abril-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Exclamación novata implora auxilio

hola ojala pueda haber alguien q se apiade de mi ignorancia :( soy muy nueva en esto y mi caso es el siguiente:
tengo el siguiente codigo con el cual hago una consulta a la bd pero solo la puedo hacer de un solo concepto, me dijeron q para consultar mas de 1 a la vez seria algo asi...

if (request.getParameterValues("data").length > 0) { String SQLString = "SELECT * FROM data WHERE id IN ("; for (String s : request.getParameterValues("data")) { SQLString += s.toString() + ", "; } SQLString = SQLString.substring(0, SQLString.lastIndexOf(',')) + ")";}

pero les repito la unica forma en q me se conectar es la de abajo asi q no se como podria meter este codigo al codigo q manejo :s porfavor ayudenme como me quedaria el jsp?????????

Código:
Connection canal = null;
ResultSet tabla= null;
Statement instruccion=null;
String sitiobase = "c:/c/materias.mdb";
String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection(strcon);
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};

String concepto = request.getParameter("concepto");

String q="select * from material where concepto="+concepto;
try { tabla = instruccion.executeQuery(q);
tabla.next();
out.println("CLAVE:&nbsp;<INPUT TYPE=TEXT NAME=clave VALUE="+ tabla.getString(2)+ "><BR><BR>");
out.println("TITULO:&nbsp;<INPUT TYPE=TEXT NAME=TITULO VALUE= '"+ tabla.getString(3)+ "'SIZE='100'><BR><BR>");
out.println("PRECIO:&nbsp;<INPUT TYPE=TEXT NAME=PRECIO VALUE= "+ tabla.getString(4)+ "><BR><BR>");

tabla.close();instruccion.close();canal.close();
} catch(SQLException e) {} catch(Exception ex){};
  #2 (permalink)  
Antiguo 14/09/2010, 17:18
 
Fecha de Ingreso: agosto-2010
Mensajes: 4
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: novata implora auxilio

No comprendo muy bien tu duda, una solución serìa: En la cadena de seleccion poner select * from tabla where concepto="x" or concepto="x" y asì cuantos conceptos tengas, perooooo funciona solo si sabes cuantos sonceptos vas a consultar.

Espero te ayude!
  #3 (permalink)  
Antiguo 14/09/2010, 17:21
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 1 mes
Puntos: 306
Respuesta: novata implora auxilio

Yo creo que es un error enorme meter ese código en una JSP, y ni siquiera sé si llegará a funcionar. Lo normal es que lo ejecutaras en el servlet, y que recogieras la respuesta en el JSP.

Pero si aun así quieres ejecutarlo en la JSP, mete ese tochazo de código entre <% ... %>

Código Javascript:
Ver original
  1. <%
  2.  
  3. tu c&#243;digo
  4.  
  5. %>

Edito: Creo que no te estoy entendiendo, ¿tu consulta es sobre como añadir esto
Cita:
if (request.getParameterValues("data").length > 0) { String SQLString = "SELECT * FROM data WHERE id IN ("; for (String s : request.getParameterValues("data")) { SQLString += s.toString() + ", "; } SQLString = SQLString.substring(0, SQLString.lastIndexOf(',')) + ")";}
al código de abajo?

Con esa SQL supuestamente buscarás los registros cuyos ids estén en un array ¿de String? que pasas a la sesión con el nombre de data.

Esa SQLString equivale a

Cita:
String q="select * from material where concepto="+concepto;

Última edición por Xerelo; 14/09/2010 a las 17:32
  #4 (permalink)  
Antiguo 14/09/2010, 23:34
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 4 meses
Puntos: 260
Sonrisa Respuesta: novata implora auxilio

Hola,

Cita:
Iniciado por sanchezg Ver Mensaje
me dijeron q para consultar mas de 1 a la vez seria algo asi...

if (request.getParameterValues("data").length > 0) { String SQLString = "SELECT * FROM data WHERE id IN ("; for (String s : request.getParameterValues("data")) { SQLString += s.toString() + ", "; } SQLString = SQLString.substring(0, SQLString.lastIndexOf(',')) + ")";}
¿Quien te dijo semejante locura?
Whooops .. perdón .. fui yo

Cita:
Iniciado por sanchezg Ver Mensaje
... para consultar mas de 1 a la vez ...
El problema es que no das mucha información y es difícil sacar una conclusión real. Que significa para ti 'consultar mas de 1 a la vez'. Traer N criterios y filtrar la consulta, o mostrar los que coinciden parcialmente y son muchos o los que coinciden exactamente y también son muchos.

En el caso que quieras mostrar todos los que coincidieron exactamente tendrías que realizar los siguientes cambios, es decir le agregamos un ciclo para que no muestre solamente el primero,
Código:
String q="select * from material where concepto=\""+concepto+"\"";
try { tabla = instruccion.executeQuery(q);
while (tabla.next()) {
out.println("CLAVE:&nbsp;<INPUT TYPE=TEXT NAME=clave VALUE="+ tabla.getString(2)+ "><BR><BR>");
out.println("TITULO:&nbsp;<INPUT TYPE=TEXT NAME=TITULO VALUE= '"+ tabla.getString(3)+ "'SIZE='100'><BR><BR>");
out.println("PRECIO:&nbsp;<INPUT TYPE=TEXT NAME=PRECIO VALUE= "+ tabla.getString(4)+ "><BR><BR>");
} 
En el caso que quieras mostrar los que coinciden parcialmente podrías realizar los siguientes cambios, como estás usando Access el comodín de la instrucción LIKE es '*',
Código:
String q="select * from material where concepto like \"*"+concepto+"*\"";
try { tabla = instruccion.executeQuery(q);
while (tabla.next()) {
out.println("CLAVE:&nbsp;<INPUT TYPE=TEXT NAME=clave VALUE="+ tabla.getString(2)+ "><BR><BR>");
out.println("TITULO:&nbsp;<INPUT TYPE=TEXT NAME=TITULO VALUE= '"+ tabla.getString(3)+ "'SIZE='100'><BR><BR>");
out.println("PRECIO:&nbsp;<INPUT TYPE=TEXT NAME=PRECIO VALUE= "+ tabla.getString(4)+ "><BR><BR>");
} 
Ahora bien, si traes varios valores diferentes en "concepto" (es decir varios input/text con el mismo nombre) entonces tendrías que unirlos para formar una instrucción mas compleja, en ese caso si se aplica una versión modificada para Strings del código que mostré anteriormente,

Código:
// String concepto = request.getParameter("concepto");
String SQLString = "SELECT TOP 10 * FROM material";
if (request.getParameterValues("concepto").length > 0) {
    SQLString = "SELECT * FROM material WHERE concepto IN (";
    for (String s : request.getParameterValues("concepto")) {
        SQLString += "\"" + s + "\", ";
    }
    SQLString = SQLString.substring(0, SQLString.lastIndexOf(',')) + ")";
}

// String q="select * from material where concepto="+concepto;

try { tabla = instruccion.executeQuery(SQLString);
while (tabla.next()) {
out.println("CLAVE:&nbsp;<INPUT TYPE=TEXT NAME=clave VALUE="+ tabla.getString(2)+ "><BR><BR>");
out.println("TITULO:&nbsp;<INPUT TYPE=TEXT NAME=TITULO VALUE= '"+ tabla.getString(3)+ "'SIZE='100'><BR><BR>");
out.println("PRECIO:&nbsp;<INPUT TYPE=TEXT NAME=PRECIO VALUE= "+ tabla.getString(4)+ "><BR><BR>");
} 
Pero como indica Xerelo también es cierto que sería aconsejable que lo hicieras en un JavaBean, y lo llamaras desde el JSP. Como estas usando campos de tipo input/text con el mismo nombre para desplegar la información, seguramente la lógica de donde recoges el post del form va a cambiar, si es que haces un post de vuelta.

Saludos,

ps:

El código posiblemente pueda contener errores, es solamente para que puedas tener una idea mas clara y profundizar mas en el tema. Esas instrucciones SQL son vulnerables a inyección de código malicioso.

Última edición por HackmanC; 15/09/2010 a las 00:13 Razón: seleccionar solamente las secciones
  #5 (permalink)  
Antiguo 15/09/2010, 15:30
Avatar de sanchezg  
Fecha de Ingreso: abril-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: novata implora auxilio

gracias a to2 efectivamente HackmanC el tercero es el q necesito lo q pasa esq tengo 1html con checkbox de ahi el usuario escoge los servicios q quieren comprar:

Código HTML:
Ver original
  1. <form action="./prueba.jsp" name="form1" method="post">
  2. <table width="704" height="322" border="0">
  3.   <tr>
  4.     <td height="94" colspan="3"><div align="center"><img src="compu.gif" width="486" height="50"></div></td>
  5.   </tr>
  6.   <tr>
  7.     <td width="405"><div align="center" class="Estilo1 Estilo2">CONCEPTO</div></td>
  8.     <td width="136"><div align="center" class="Estilo3">IMPORTE</div></td>
  9.     <td width="149"><div align="center"><span class="Estilo3">CANTIDAD</span></div></td>
  10.   </tr>
  11.   <tr>
  12.     <td><span class="Estilo11">
  13.       <input name="concepto" type="checkbox" id="concepto" value="40.00">
  14.       BONO POR 10 HRS.
  15. </span></td>
  16.     <td><div align="center" class="Estilo1 Estilo12">$ 40.00</div></td>
  17.     <td><div align="center">
  18.       <span class="Estilo1 Estilo12"><span class="Estilo11">
  19.       <input name="cantidad2" type="text" id="cantidad2">
  20.       </span></span> </div></td>
  21.   </tr>
  22.   <tr>
  23.     <td><span class="Estilo11">
  24.       <input name="concepto" type="checkbox" id="concepto" value="70.00">
  25.       BONO MENSUAL </span></td>
  26.     <td><div align="center" class="Estilo13">$ 70.00 </div></td>
  27.     <td><div align="center">
  28.       <span class="Estilo1 Estilo12"><span class="Estilo11">
  29.       <input name="cantidad3" type="text" id="cantidad3">
  30.       </span></span> </div></td>
  31.   </tr>
  32.   <tr>
  33.     <td><span class="Estilo11">
  34.       <input name="concepto" type="checkbox" id="concepto" value="170.00">
  35.       BONO SEMESTRAL </span></td>
  36.     <td><div align="center"><span class="Estilo13">$ 170.00 </span></div></td>
  37.     <td><div align="center">
  38.       <span class="Estilo1 Estilo12"><span class="Estilo11">
  39.       <input name="cantidad4" type="text" id="cantidad4">
  40.       </span></span> </div></td>
  41.   </tr>
  42.   <tr>
  43.     <td><span class="Estilo11">
  44.       <input name="concepto5" type="checkbox" id="concepto" value="5.00">
  45. HORA DE USO POR COMPUTADORA </span></td>
  46.     <td><div align="center"><span class="Estilo1 Estilo12"></span>
  47.       <div align="center" class="Estilo13">$ 5.00 </div>
  48.       <span class="Estilo1 Estilo12"></span></div></td>
  49.     <td><div align="center">
  50.       <span class="Estilo1 Estilo12"><span class="Estilo11">
  51.       <input name="cantidad5" type="text" id="cantidad5">
  52.       </span></span></div></td>
  53.   </tr>
  54.   <tr>
  55.     <td><span class="Estilo11">
  56.       <input name="concepto6" type="checkbox" id="concepto" value="1.00">
  57. HOJA DE IMPRESION  </span></td>
  58.     <td><div align="center" class="Estilo13">$ 1.00 </div></td>
  59.     <td><div align="center">
  60.       <span class="Estilo1 Estilo12"><span class="Estilo11">
  61.       <input name="cantidad6" type="text" id="cantidad6">
  62.       </span></span> </div></td>
  63.   </tr>
  64.   <tr>
  65.     <td colspan="3"><div align="center" class="Estilo13"></div>    <div align="center">
  66.       <p><input type="submit" name="Submit" value="RECIBO">

de este el usuario puede escoger 3 o los 6 conceptos, entonces el jsp tiene q recibirlos hacer la consulta a la bd, recoger el resultado y pintarlo por lo q seguun yo si es el tercer codigo de HackmanC aahhhhhhhhhhh soy muy burra :(
  #6 (permalink)  
Antiguo 15/09/2010, 17:22
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 4 meses
Puntos: 260
Sonrisa Respuesta: novata implora auxilio

Hola,

Si ese el caso entonces posiblemente podría ser algo así:

Código:
Connection canal = null;
ResultSet tabla= null;
Statement instruccion=null;
String sitiobase = "c:/c/materias.mdb";
String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection(strcon);
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};

//String concepto = request.getParameter("concepto");

String SQLString = "SELECT TOP 10 * FROM material";
if (request.getParameterValues("concepto").length > 0) {
    SQLString = "SELECT * FROM material WHERE concepto IN (";
    for (String s : request.getParameterValues("concepto")) {
        SQLString += s.toString() + ", ";
    }
    SQLString = SQLString.substring(0, SQLString.lastIndexOf(',')) + ")";
}

//String q="select * from material where concepto="+concepto;
try { tabla = instruccion.executeQuery(SQLString);
while (tabla.next()) {
out.println("CLAVE:&nbsp;<INPUT TYPE=TEXT NAME=clave VALUE="+ tabla.getString(2)+ "><BR><BR>");
out.println("TITULO:&nbsp;<INPUT TYPE=TEXT NAME=TITULO VALUE= '"+ tabla.getString(3)+ "'SIZE='100'><BR><BR>");
out.println("PRECIO:&nbsp;<INPUT TYPE=TEXT NAME=PRECIO VALUE= "+ tabla.getString(4)+ "><BR><BR>");
}
tabla.close();instruccion.close();canal.close();
} catch(SQLException e) {} catch(Exception ex){};
Lo único que me parece extraño es que en concepto tengas números que coinciden exactamente con el precio, revisa que estés usando los campos correctos en el último JSP que mostraste y que tengan el mismo nombre todos los checkbox.

Código:
      <input name="concepto5" type="checkbox" id="concepto" value="5.00">
HORA DE USO POR COMPUTADORA </span></td>
    <td><div align="center"><span class="Estilo1 Estilo12"></span>
      <div align="center" class="Estilo13">$ 5.00 </div>
      <span class="Estilo1 Estilo12"></span></div></td>
    <td><div align="center">
      <span class="Estilo1 Estilo12"><span class="Estilo11">
      <input name="cantidad5" type="text" id="cantidad5">
      </span></span></div></td>
Saludos,
  #7 (permalink)  
Antiguo 17/09/2010, 08:46
Avatar de sanchezg  
Fecha de Ingreso: abril-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: novata implora auxilio

sip error de dedo ;) pero si lo pongo como ese ultimo creo q ya n me servira lo de
Código HTML:
Ver original
  1. while (tabla.next()) {
  2. out.println("CLAVE:&nbsp;<INPUT TYPE=TEXT NAME=clave VALUE="+ tabla.getString(2)+ "><BR><BR>");
  3. out.println("TITULO:&nbsp;<INPUT TYPE=TEXT NAME=TITULO VALUE= '"+ tabla.getString(3)+ "'SIZE='100'><BR><BR>");
  4. out.println("PRECIO:&nbsp;<INPUT TYPE=TEXT NAME=PRECIO VALUE= "+ tabla.getString(4)+ "><BR><BR>");
  5. }
como pintaria el resultado?? :s
  #8 (permalink)  
Antiguo 17/09/2010, 15:03
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 4 meses
Puntos: 260
Sonrisa Respuesta: novata implora auxilio

Hola,

Bueno, eso depende completamente de la vista, y el diseño que quieras usar, pero puedes generar una tabla con datos, al igual que el JSP anterior.

Pseudo-código
Código Java:
Ver original
  1. <table>
  2.   <tr><td>CLAVE</td><td>TITULO</td><td>PRECIO</td></tr>
  3.   <% while (tabla.next()) { %>
  4.     <tr><td><% tabla.getString(2) %></td><td><% tabla.getString(3)%></td><td><% tabla.getString(4) %></td></tr>
  5.   <% } %>
  6. </table>

Saludos,
  #9 (permalink)  
Antiguo 17/09/2010, 17:35
Avatar de sanchezg  
Fecha de Ingreso: abril-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: novata implora auxilio

esq ya lo estuve intentando asi y no me arroja nada crei q era porq lo puse mal pero pinte la exepcion y me puso:java.sql.SQLException: [Microsoft][Controlador ODBC Microsoft Access] Pocos parámetros. Se esperaba 2.

oye en serio mil gracias por tu paciencia y ayuda creo q me urgen 1s clasesitas :( mi ultimo codigo quedo asi...
Código HTML:
Ver original
  1. <&#37;
  2. Connection canal = null;
  3. ResultSet tabla= null;
  4. Statement instruccion=null;
  5. String sitiobase = "c:/d/material.mdb";
  6. String strcon= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + sitiobase;
  7. try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  8. canal=DriverManager.getConnection(strcon);
  9. instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
  10. ResultSet.CONCUR_UPDATABLE);
  11. } catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
  12. String SQLString = "SELECT TOP 10 * FROM sistemas";
  13. if (request.getParameterValues("clave").length > 0) {
  14.     SQLString = "SELECT * FROM sistemas WHERE clave IN (";
  15.     for (String s : request.getParameterValues("clave")) {
  16.         SQLString += "\"" + s + "\", ";
  17.     }
  18.     SQLString = SQLString.substring(0, SQLString.lastIndexOf(',')) + ")";
  19. }
  20. try { tabla = instruccion.executeQuery(SQLString);
  21. while (tabla.next()) {
  22. out.println("CLAVE:<BR> "+tabla.getString(1)+" <BR>");
  23. out.println("CONCEPTO:<BR> "+tabla.getString(2)+" <BR>");
  24. out.println("PRECIO:<BR> "+tabla.getString(3)+" <BR>");
  25. }
  26. tabla.close();instruccion.close();canal.close();
  27. } catch(SQLException e) {out.print(e);} catch(Exception ex){};
  28. %>
  #10 (permalink)  
Antiguo 19/09/2010, 17:15
Avatar de sanchezg  
Fecha de Ingreso: abril-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: novata implora auxilio

listo si me quedo ya MILLLL GRACIAS HackmanC TE AMO gracias :)

Etiquetas: auxilio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:45.