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

[SOLUCIONADO] Recuperar datos de bbdd

Estas en el tema de Recuperar datos de bbdd en el foro de Java en Foros del Web. Hola Estoy aprendiendo a hacer conexiones a base de datos, tengo una bbdd Oracle, uso Tomcat y todo esto con Eclipse. Sólo quiero recuperar unos ...
  #1 (permalink)  
Antiguo 21/02/2013, 14:30
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Recuperar datos de bbdd

Hola

Estoy aprendiendo a hacer conexiones a base de datos, tengo una bbdd Oracle, uso Tomcat y todo esto con Eclipse.
Sólo quiero recuperar unos valores de la base de datos y siempre me da error, os copio los dos archivos que tengo, si a alguien se le ocurre una forma más sencilla de hacerlo por favor que me lo diga, yo apenas sé programar con ésto y sólo se me ha ocurrido ésto.

archivo ejercicio1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.util.*,paquetes.*,java.sql.* "%>
<!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>Insert title here</title>
</head>
<body>
<jsp:useBean id="datos" scope="session" class="paquetes.importar" />
<%
datos.conectar();
ArrayList enombres = datos.consultaremp();
if (enombres != null)
{
if (enombres.size () > 0)
{
for (Iterator i = enombres.iterator(); i.hasNext(); )
{
%>
<li> <%= enombres %></li>
<%
}
}
}
%>
</body>
</html>


archivo importar.java

package paquetes;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;

public class importar {
Connection conecta;
public void conectar()
throws SQLException, ClassNotFoundException {
Class.forName("oracle.jdbc.driver.OracleDriver");
conecta=DriverManager.getConnection("jdbc:oracle:t hin:@127.0.0.1:8080:xe","system","1234");
}
public ArrayList consultaremp(){
ArrayList nombres = new ArrayList ();
try {
PreparedStatement consulta = conecta.prepareStatement("SELECT ename FROM emp");
ResultSet reg = consulta.executeQuery ();
while (reg.next ()) {
nombres.add(reg);
} consulta.close ();

} catch (SQLException e) {
System.out.println("error en la consulta"+e.getMessage());
}
return nombres;
}
}



--------------
Me da error en la línea 12 que es la de : "datos.conectar();".

Ya no sé que hacer, a ver si alguien puede arrojar algo de luz.

Millones de gracias
  #2 (permalink)  
Antiguo 21/02/2013, 16:00
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Recuperar datos de bbdd

Hola:

En la conexión pones esta cadena jdbc:oracle:t hin:@127.0.0.1:8080. El puerto 8080 es el de tomcat, no el de la base de datos de oracle. El puerto de oracle suele ser el 1521

Si sigue saliendo error, por favor pon el error y di la linea de tu código de más bajo nivel que da el error. En este caso la excepción seguramente no salta en conectar(), sino en la linea del getConnection() dentro del metodo conectar().

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 22/02/2013, 06:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

Muchas gracias por responder, ando loca porque tengo un examen de ésto en breve.

Ya cambié el puerto, pero me sigue dando error, como no se pueden subir capturas de pantalla lo que pone es:
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

No sé que le faltará, o si el ejercicio está mal hecho, pero en la carpeta bin del Tomcat tengo metido el ojdbc14.jar, y también la carpeta webcontent del ejercicio, por si acaso. No sé qué estoy haciendo mal.

Muchas gracias
  #4 (permalink)  
Antiguo 22/02/2013, 06:41
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Recuperar datos de bbdd

¿Lo tienes incluido en el build path del proyecto desde el IDE que usas?
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 22/02/2013, 07:04
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Recuperar datos de bbdd

Hola:

Tiene que estar en la carpeta WEB-INF/lib
Si estás arrancando con un IDE, como comenta Fuzzylog, tendrás que meterlo en las dependencias de tu proyecto.
Puedes meterlo también el la carpeta lib/ext de Tomcat, pero entonces tienes que ser consciente de que ese jar estará disponible para todas las aplicaciones que despliegues en ese tomcat y puede haber problemas de versiones si otra aplicación pone una versión distinta de jar en su WEB-INF/lib

Se buena.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 22/02/2013, 08:36
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

Ahora he metido el jar en el lib, estaba en el webcontent directamente, y ahora al ejecutar me sale un bucle con la siguiente línea:

oracle.jdbc.driver.OracleResultSetImpl@a28dc6, oracle.jdbc.driver.OracleResultSetImpl@a28dc6..... .................

Y se me queda frito repitiendo esa línea. ¿Qué puede ser?

Por cierto, el IDE ese que os referís, que es el Eclipse? Sólo lo estoy usando para hacer un curso, sólo hago ejercicios.
  #7 (permalink)  
Antiguo 22/02/2013, 10:24
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Recuperar datos de bbdd

Si, el IDE es eclipse, netbeans o cualquier otro de ese estilo.

Para leer el nombre, debes hacer esto

Código java:
Ver original
  1. while (reg.next()) {
  2.    nombres.add(reg.getString(1));
  3. }

un ResultSet es una fila completa de la tabla, aunque solo tenga una columna. Con getXXX(1), getXXX(2) vas obteniendo los valores de las columnas, siendo 1 la columna 1, 2 la 2, etc y XXX el tipo de dato de esa columna (String, Integer, ...). Ahora estás metiendo en nombres directamente las filas completas.

Imagino que tu problema ahora viene cuando intentas sacar en pantalla los nombres, imagino que haces un bucle para sacarlos. Al haber metido el ResultSet y no el nombre, te sale eso oracle.jdbc.driver.OracleResultSetImpl@a28dc6.

Además, posiblemente no incrementas el indice del bucle, porque siempre saca el mismo elemento (el @a28dc6) y no termina nunca.

Se buena.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 22/02/2013, 13:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

Jo, Muchíiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisimas gracias por tu ayuda, no sabes cuanto te lo agradezco, eres genial!!!

Gracias por decirme lo de (1), no lo sabía, supongo que si quiero acceder a la primera columna será desde 0 y así.
Después de corregir eso me pasaba que me visualizaba los 14 nombres que quería visualizar pero 14 veces seguidas, así que quité el bucle del jsp que puse arriba y ya sólo me los visualiza una vez sin tener que recorrer el ArrayList.
Ahora hace lo que yo quería que hiciese.

Pues no tienes ni idea de lo que me has ayudado, estaba super agobiada porque tengo un examen el lunes y nos han dado el temario hace unos pocos días, ahora que ya funciona todo por lo menos puedo investigar a partir de aquí, aunque seguro que me surgirán más dudas y si te pillo por aquí y eres tan amable te preguntaré alguna dudilla..

Una cuestión que me queda en el tintero, me llamó la atención que no me hizo falta recorrer el ArrayList para que me visualizara todos los elementos, siemplemente le dije que lo visuazara y lo mostró entero. Yo es que no suelo programar en Java y con otros programas tenía que pasarlo de uno en uno y visualizarlo. Con los Collection o los objetos supongo que no pasa ésto, que hay que sacarlos de uno en uno, por lo menos los objetos creo que sí, los collection no estoy segura.

Mil gracias y feliz fin de semana
  #9 (permalink)  
Antiguo 22/02/2013, 15:19
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Recuperar datos de bbdd

Hola:

Lo del (1) es 1 para la primera columna. Es uno de esos casos raros en java en que los índices no empiezan en 0. También puedes poner el nombre de la columna, es decir, reg.getString("ename").

ArrayList hereda de AbstractCollection y esta clase tiene un método toString() que es el que se usa cuando se saca una collection por pantalla. Ese método saca un String con todos los elementos, por eso te salen sin necesidad de hacer el bucle.

Se buena.
__________________
Apuntes Java
Wiki de Programación
  #10 (permalink)  
Antiguo 23/02/2013, 12:56
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

Tus explicaciones son geniales, te puedo llevar al examen???

Verás, estoy haciendo un ejercicio en el que hay una tabla de empleados y a partir de un formulario recoger todos los valores para crear uno nuevo. Sólo tengo una pega de momento, que hay un valor a recoger del formulario que es una fecha.
En la base de datos el formato de fecha aparece como "02/04/81", pero claro, al meterlo yo en el formulario me lo coge como string.
Me da el siguiente error: "Unable to convert string "10/12/89" to class "java.sql.Date" for attribute "hiredate""

En la clase lo tengo para que lo convierta como los int y como los string:
inserta.setDate(5,registro.getHiredate());

y luego para crear el objeto:
<jsp:useBean id="datos" scope="session" class="paquetes.AccederBd" />
<jsp:useBean id="datosTabla" scope="session" class="paquetes.Empleado" />
<jsp:setProperty name="datosTabla" property="*" />

Así que no sé qué formato le tengo que poner a la fecha al recogerlo en el formulario para que me lo coja automáticamente como string, porque si le tengo que hacer un formateo para convertirlo a date luego ya no podré recoger todos los datos con property="*", no?


---------

Otra dudilla, ésta línea no hace más que darme problemas:

int asubir=Integer.parseInt(request.getParameter("cant idad"));

Ya no sé que poner, no salgo de ahí :(

Última edición por soymari; 23/02/2013 a las 15:50 Razón: Añadir duda
  #11 (permalink)  
Antiguo 23/02/2013, 16:58
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Recuperar datos de bbdd

Para conseguir un Date a partir de un String usa la clase SimpleDateFormat, en concreto su método parse(). Aquí tienes algún ejemplo http://chuwiki.chuidiang.org/index.p...mpleDateFormat

Se buena.
__________________
Apuntes Java
Wiki de Programación
  #12 (permalink)  
Antiguo 24/02/2013, 05:39
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

Te agradezco tu ayuda, he puesto el conversor pero sigue sin funcinar. El código es el siguiente:
...
import="java.text.SimpleDateFormat,java.util.Date, java.text.ParseException"
...
<jsp:useBean id="datos" scope="session" class="paquetes.AccederBd" />
<jsp:useBean id="datosTabla" scope="session" class="paquetes.Empleado" />
<%
SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yy");
try
{
Date fecha = formateador.parse(request.getParameter("hiredate") );
}
catch (ParseException e)
{
// Error, la cadena de texto no se puede convertir en fecha.
}
%>
<jsp:setProperty name="datosTabla" property="hiredate" value="fecha" />
<jsp:setProperty name="datosTabla" property="*" />
-------------------

Y el error que me sale es en ésta línea:
<jsp:setProperty name="datosTabla" property="hiredate" value="fecha" />
Y el error es:
Unable to convert string "fecha" to class "java.util.Date" for attribute "hiredate": Property Editor not registered with the PropertyEditorManager

La fecha se coge a través de un formulario en el que se recogen otros datos, y claro, como uso "property="*", quería aparte pasar la fecha con formato de Date, pero no hay manera, no sé cómo hacerlo y no encuentro ningún ejemplo por internet donde lo hagan. Son fechas de alta de los empleados, no fechas actuales.


Estoy desesperada ya, anda que no le he echado horas y nada :(

PD. En la clase java de la conexión y en el jsp de insertar empleado tengo importada la clase java.util.date, pero en la clase Empleado tengo importada java.sql.date, porque si los cambio me da error.

Última edición por soymari; 24/02/2013 a las 06:19 Razón: Añadir info
  #13 (permalink)  
Antiguo 24/02/2013, 07:02
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Recuperar datos de bbdd

Lo más rápido es que en el método set de tu bean pongas la fecha como String y dentro del set hagas la conversión a Date

Código java:
Ver original
  1. public class Empleado {
  2.    Date hiredate;
  3.    public void setHiredate (String date) {
  4.       hiredate = simpleDateFormat.format (date);
  5.    }
  6. }

Aquí tienes algo sobre el tema http://stackoverflow.com/questions/7...om-input-field

Se buena.
__________________
Apuntes Java
Wiki de Programación
  #14 (permalink)  
Antiguo 24/02/2013, 15:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

Muchísimas gracias por tu respuesta. Lo he cambiado, y me han salido errores en un montón de métodos que lo utilizan, pero hay un error que no he conseguido quitar, en es el método para insertar un nuevo empleado, tengo la siguiente línea que me da error:

inserta.setString(5,registro.getHiredate());

Yo lo tenía con setDate y me da error, y con setString también, porque ésto viene de:
public Date getHiredate() {
return hiredate;
}
Ahora ya sí que estoy perdida, no sé seguir :(
  #15 (permalink)  
Antiguo 24/02/2013, 16:44
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 5 meses
Puntos: 454
Respuesta: Recuperar datos de bbdd

Estaría bien si dijeras qué error te da, así no hay que adivinarlo.

Al ser Date, debe ser inserta.setDate(). Si te da errror, posiblemente es que getHiredate() devuelve null. Si es null, en vez de setDate() es setNull(5,registro.getHiredate(), Types.DATE). En vez de DATE (fecha), puede ser Types.TIME (hora) o Types.TIMESTAMP (fecha y hora), según lo que tengas en base de datos.

Se buena.
__________________
Apuntes Java
Wiki de Programación
  #16 (permalink)  
Antiguo 25/02/2013, 06:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

El examen es esta tarde, no me va a dar tiempo ya, pero bueno, te subo unas capturas de pantalla para que veas como lo tengo hecho:









El error lo da en el inserta.setDate y pone:

The method setDate(int, Date) in the type PreparedStatement is not applicable for the arguments (int, Date)

Todo esto después de cambiar public void setHiredate(String hiredate) [antes era Date]

Millones de gracias
  #17 (permalink)  
Antiguo 25/02/2013, 06:47
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Recuperar datos de bbdd

prueba con inserta(5,(java.sql.Date)registro.getHireDate().ge tTime());

El problema creo q está en que PreparedStatement admite java.sql.Date y tu le estás enviando un java.util.Date.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #18 (permalink)  
Antiguo 25/02/2013, 06:57
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

No me lo puedo creer!!! Funciona!!!! poniendole delante lo del (java.sql.Date) y junto con los arreglos del String de antes ha funcionado!!! Me he quedado con la boca abierta cuando he mirado la base de datos y había un registro nuevo, jeje!
Ya sé que parezco tonta, pero ahora me voy con más confianza al examen. A ver si hay suerte...

Millones de gracias a los dos!!!!
  #19 (permalink)  
Antiguo 25/02/2013, 15:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Recuperar datos de bbdd

Bueno pues ya hice el examen, no nos dejaron conectarnos a la bbdd ni probar nada, así que tuvimos que hacerlo a ciegas. Lo he comprobado en casa y creo que lo único que puse mal es un == que era un >=, pero bueno.

Quiero agradeceros todo lo que me habéis ayudado y lo rapidos que habéis sido, sabed que sin vosotros no hubiera podido ser posible. Probablemente no podré compensaros de ninguna manera, pero espero tener la oportunidad de ayudar a alguien y de alguna manera así devolveros el favor.

Millones de gracias ;)

Etiquetas: bbdd, eclipse, jsp, programa
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 10:38.