Cuando queremos leer datos de un ResultSet despues de haber cerrado la conexion (por ejemplo, si utilizamos una “Helper Class” para el acceso a datos), nos lanza una excepcion de tipo “java.sql.SQLException: Closed Connection: next”.
Para evitar esto hay que utilizar una clase que implemente la interfaz “CachedRowSet” tales como: “com.sun.rowset.CachedRowSetImpl” u “oracle.jdbc.rowset.OracleCachedRowSet”.
Si nos conectamos a una base de datos de Oracle debemos utilizar un OracleCachedRowSet porque si utilizamos un CachedRowSetImpl nos dara la excepcion java.lang.NumberFormatException: For input string: “4294967295″ – que no nos da ninguna pista de lo que ocasiono el error –
Siempre hay mas compatibilidad entre tipos del mismo proveedor ya que muchas veces la implementacion de las interfaces varia. Y si nos fijamos bien, el ResultSet que nos regresa un executeQuery es de tipo OracleResultSetImpl, asi que se lleva mejor con el OracleCachedRowSet a la hora de llenarlo.
Bueno, aqui dejo un ejemplo de como utilizarlo:

ResultSet resultSet = null;
String campo1;
Integer campo2;
try {
String sql =
“SELECT * FROM TABLA”;
resultSet = executeQuery(sql);
if(resultSet.next()) {
campo1=resultSet.getString(“CAMPO1″);
campo2 = resultSet.getInt(“CAMPO2″);
}
resultSet.close();
} catch (Exception exc) {
throw new RuntimeException(exc);
}

public ResultSet executeQuery(String sql) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
OracleCachedRowSet cachedRowSet=null;
try {
Class.forName(“oracle.jdbc.OracleDriver”);
connection =
DriverManager.getConnection(databaseURL, databaseUserName,
databaseUserPassword);
connection.setAutoCommit(false);
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
cachedRowSet=new OracleCachedRowSet();
cachedRowSet.populate(resultSet);
resultSet.close();
preparedStatement.close();
return cachedRowSet;
} catch (Exception exc) {
throw new RuntimeException(exc);
} finally {
try {
if ((connection != null) && (!connection.isClosed())) {
connection.close();
}
} catch (Exception exc) {
throw new RuntimeException(exc);
}
}
}

Muchas veces mientras diseñamos nuestras clases, nos encontramos con propiedades a las cuales nos gustaria poner nombres que contienen la letra “ñ”. Un ejemplo seria una propiedad llamada año, antes lo resolviamos cambiando estos nombres por palabras como “anyo”,algunos inclusive con ano :-( ) jajaja y otros utilizandolas en ingles (year).
Tal vez sea muy quisquilloso pero me gusta utilizarla tal cual -año-.
El Visual Studio si nos permite utilizarlas y la verdad es que me acostumbre, cuando utilice el jdeveloper en windows tampoco tuve ningun problema, hasta que copie una aplicacion a mi pc con linux y entonces fue que paso algo. Primero me cambio las ñ’s por unos simbolos raros, entonces lo que hice fue cambiar esos simbolos por las ñ’s, pero a la hora de compilar me arrojaba un error de IllegalCharacter donde encontraba las ñ’s.
La razon de esto es el “character set” que utiliza el jdeveloper. En windows utiliza el cp1252 y en linux por default el UTF-8. Intente cambiando el character set en linux por el cp1252 en las preferencias del jdeveloper pero seguia marcando el error IllegalCharacter, entonces lo intente con el ISO-8859-1 y voila!! ahora puedo utilizar las preciosas ñ’s de nuestro idioma.

jdeveloper preferences
Nota: El character set que este establecido por default en el jdeveloper depende de la configuracion regional del sistema operativo.

En ubuntu 7.10 el VMware server 1.0.5 no detecta los dispositivos usb. Para que los reconozca y poder accesarlos mediante el menu VM->Removable Devices->USB Devices es necesario agregar un controlador usb en la configuración de la maquina virtual y ejecutar el comando

mount -t usbfs none /proc/bus/usb

referencias: http://kelvinchufei.blogspot.com/2007/01/add-usb-device-in-vmware.html

Seguir

Get every new post delivered to your Inbox.

Únete a otros 195 seguidores