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

[SOLUCIONADO] Como imprimir datos usando derby

Estas en el tema de Como imprimir datos usando derby en el foro de Java en Foros del Web. Hola estoy aprendiendo derby ya puedo hacer casi todo menos imprimir mis datos, en el código el final esta: Código: //Imprimo Filas de la tabla ...
  #1 (permalink)  
Antiguo 05/07/2015, 17:07
 
Fecha de Ingreso: junio-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Como imprimir datos usando derby

Hola estoy aprendiendo derby ya puedo hacer casi todo menos imprimir mis datos, en el código el final esta:
Código:
//Imprimo Filas de la tabla
    Integer idUser = rs.getInt("idUser");
    String first = rs.getString("FirstName");
    String last = rs.getString("LastName");
    System.out.println(idUser + " se llama: " + first + " " + last);
no se por que me da un error:
Código:
Exception in thread "main" java.sql.SQLException: Estado del cursor no válido: sin fila actual.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.ConnectionChild.newSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedResultSet.checkOnRow(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedResultSet.getColumn(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedResultSet.getInt(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedResultSet.getInt(Unknown Source)
	at db_embebida.CrearBaseDeDatos.main(CrearBaseDeDatos.java:56)
Caused by: ERROR 24000: Estado del cursor no válido: sin fila actual.
	at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
	at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source)
	... 11 more
Java Result: 1
Código:
 public static void main(String[] args) throws SQLException {
 
     //Establezco la conexion con la base de datos, si no existe la crea
    String db="prueba33";
    Connection conn = DriverManager.getConnection("jdbc:derby:"+db+";create=true");
    System.out.println("DB "+db+" creada");
    
    //creo una tabla con 3 columnas
    Statement st = conn.createStatement();
      String sqlCreateTableUsers =
             "CREATE TABLE users ( " +
             "FirstName VARCHAR(20) NOT NULL, " +
             "LastName VARCHAR(20) NOT NULL, " +
             "idUser INTEGER NOT NULL CONSTRAINT idUser_PK PRIMARY KEY " +
             ")";
    st.execute(sqlCreateTableUsers);
    System.out.println("Tablas creadas");
    //Inserto Datos en la tabla creada
    st.execute("INSERT INTO users VALUES('jose','casta',1)");
    st.execute("INSERT INTO users VALUES('del','belt',2)");
    st.execute("INSERT INTO users VALUES('jos','vel',3)");
    System.out.println("Datos Ingresados");
    
    //Consulto los datos ingresados
    //resultSet..
    ResultSet rs=st.executeQuery("SELECT * FROM users");
    //Contar filas
    int nOfRows=0;
    while(rs.next()){
        nOfRows++;
    }
    System.out.println("filas: "+nOfRows);
    //Imprimo Filas de la tabla
    Integer idUser = rs.getInt("idUser");
    String first = rs.getString("FirstName");
    String last = rs.getString("LastName");
    System.out.println(idUser + " se llama: " + first + " " + last);
  
    
    
    conn.close();
    
 }

Alguien sabe que tengo mal que no me imprime la consulta? gracias
  #2 (permalink)  
Antiguo 06/07/2015, 00:40
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Como imprimir datos usando derby

Cita:
while(rs.next()){
nOfRows++;
}
Aqui estas recorriendo todo el cursor, por lo que luego cuando intentas leer ya no esta en ninguna posicion valida.

Lo mas facil es que lleves el resultset a la primera line de nuevo con:
Código Java:
Ver original
  1. rs.first()

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 06/07/2015, 10:40
 
Fecha de Ingreso: junio-2011
Mensajes: 39
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Como imprimir datos usando derby

Gracias ya pude imprimir de otra forma por que el first no me sirvió, me sale el siguiente error:

Cita:
Exception in thread "main" java.sql.SQLException: El método 'first()' sólo está permitido en cursores de desplazamiento.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.get SQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory.get SQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLExcep tion(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLExcep tion(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedResultSet.checkScr ollCursor(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedResultSet.first(Un known Source)
at db_embebida.CrearBaseDeDatos.main(CrearBaseDeDatos .java:58)
Caused by: ERROR XJ061: El método 'first()' sólo está permitido en cursores de desplazamiento.
at org.apache.derby.iapi.error.StandardException.newE xception(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory.wra pArgsForTransportAcrossDRDA(Unknown Source)
... 7 more
Java Result: 1
  #4 (permalink)  
Antiguo 06/07/2015, 14:07
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Como imprimir datos usando derby

Buenas,

Cierto, por defecto el cursor creado por el statement solo permite ir hacia delante. Para arreglarlo, simplemente te bastaba declararlo como "scrollable":
Código Java:
Ver original
  1. Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

En fin, como lo has marcado como solucionado pero no publicas una solución, adjunto yo la mía.

Entiendo que, aunque no lo explicas, lo que realmente quieres es imprimir todos los valores de la tabla y contar el total. Para ello simplemente basta con cambiar un poco el orden:

Código Java:
Ver original
  1. while(rs.next()){
  2.      //Imprimo Filas de la tabla
  3.     Integer idUser = rs.getInt("idUser");
  4.     String first = rs.getString("FirstName");
  5.     String last = rs.getString("LastName");
  6.     System.out.println(idUser + " se llama: " + first + " " + last);
  7.  
  8.         nOfRows++;
  9.     }
  10.     System.out.println("filas: "+nOfRows);


Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: sql, string, usando
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 07:42.