Entradas

Mostrando las entradas con la etiqueta trucos

Concatenar filas en una columna (MySQL)

Este truco lo vi en la documentación de MySQL (vamos, sí, sí. no es Java, pero es algo que encontré y quiero compartirlo). Imaginemos que tenemos una tabla así +--------+--------+ | campo1 | campo2 | +--------+--------+ | fila1 | a | | fila2 | b | | fila2 | c | | fila1 | b | | fila3 | b | | fila2 | c | +--------+--------+ Y queremos concatenar todos los valores del campo2 por cada fila no repetida de campo1 así: +--------+--------+ | campo1 | campo2 | +--------+--------+ | fila1 | a,b | | fila2 | b,c | | fila3 | b | +--------+--------+ Para ello, hay que usar la función de agregación GROUP_CONCAT SELECT campo1,group_concat(distinct campo2) FROM tabla GROUP BY 1

Combinación de teclas y autocompletar en NetBeans

Aquí podeís ver un PDF con todas las combinaciones de teclas que son usados desde la versión 6.5 del NetBeans IDE. http://www.netbeans.org/files/documents/4/2355/shortcuts-6.5.pdf Además contiene atajos que permite escribir más rapido en el IDE. Por ejemplo ¿sabias que si escribes en el editor las letras psvm e inmediatamente presionas la tecla TAB crea el método public static void main(){} con todo y parámetros?. Es un documento bien útil.

Glassfish: " Error al cargar los descriptores de implementación para el módulo..."

El escenario es el siguiente: Tienes un módulo EJB que consume un WebService, ya sea desde otro proyecto local o desde un WSDL externo al proyecto. Y tienes una aplicación web que utiliza el módulo EJB. Cuando despliegas el EJB, no hay problemas, pero cuando despliegas el módulo web, no sale nada y lanza un error: wsdl file META-INF/wsdl/client/......wsdl does not exist for service-ref... Dirás (como yo dije) "pero si compila!!!".. y pensarás "y si consumo el WS dentro del modulo web?". y te negarás porque eso rompería el esquema que pensabas... bueno... alguien también le pasó y también encontró la solución. Nada más hay que revisar el código que crea NetBeans en el EJB cuando consume un WebService: @WebServiceRef(wsdlLocation = "META-INF/wsdl/client/ProductsList/localhost_8084/ProductsListService/ProductsList.wsdl") private ProductsListService service; El EJB lo consume normalemente, porque el WSDL está dentro del mismo proyecto EJB. Cuando es llamado d

NetBeans en la bandeja del sistema (System Tray)

Imagen
Encontré un plugin en la ventana "plugins" del NetBeans, llamado "System tray". Lo instalé, y me olvidé que lo habia hecho... hasta que minimicé todas las ventanas, y ví que apareció esto en mi bandeja del sistema Bueno, ahí lo tienen.. el NetBeans en el "System tray". Pueden ver sus opciones en la ficha "System tray" de "Misceláneas" de las opciones de NetBeans.

getParameter() con JSF y ICEfaces

Cuando se quiere obtener el parámetro de un URL usando JSP, se usa así: String param=request.getParameter("nombre"); En JSF, es un poquitín más largo: String param=FacesContext.getCurrentInstance().getExternalContext() .getRequestParameterMap().get("nombre"); Pero lo anterior no funciona en ICEfaces. Devuelve siempre nulo. Si se quiere obtener el parámetro por URL, se debe escribir: String param=((HttpServletRequest)FacesContext.getCurrentInstance() .getExternalContext().getRequest()).getParameter("nombre");

Filtrar una tabla en JTable

Un alumno me pregunta cómo filtrar los datos de un JTable, siendo estos datos obtenidos de un query. La mejor manera no es manipular el JTable a través de su cantidad de columnas, agregando filas, borrando algunas de ellas, modificando las celdas, etc. Eso es realmente un dolor de cabeza. Recordemos que estamos trabajando en Java que es Orientado  a Objetos.. no en VisualBasic. Así que, si queremos manipular los datos de un JTable, debemos usar una clase que se encargue de manipular los datos, y que el jtable use esa clase. La interfaz TableModel es la indicada. Pero tiene demasiados métodos a implementar. Así que usaremos algo ya casi hecho. Se llama la clase abstracta AbstractTableModel . Simplemente, debemos heredarla: public class PersonasTableModel extends AbstractTableModel {.... Y con eso debemos implementar tres métodos: getRowCount() , getColumnCount() y getValueAt(int rowIndex, int columnIndex) . La clase que estamos creando debe tener un arreglo interno. Este arreglo es el

JDBC para Access sin DSN

Para acceder a Access desde un JDBC, siempre nos han enseñado que se debe a Herramientas Administrativas > Administrador de Orígines de ODBC, crear un nuevo Origen, especificar el nombre del DNS, bla bla bla, y después desde el JDBC escribir como URL el nombre del DNS, bla bla. Lo malo de esta técnica es que en cada máquina donde se va a ejecutar la aplicación java, necesita que se configure el ODBC. Ya que somos profesionales, debemos evitar las configuraciones adicionales para que nuestra aplicación funcione. Java nos hace profesionales :) Así que, ahora evitaremos todo el rollo de crear el DSN en el ODBC. Usemos esto: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String myDB ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/data/neptuno.MDB"; Connection conn = DriverManager.getConnection(myDB,"",""); Pero no solo es para Access, sino para cualquier ODBC. Veamos como hacer lo mismo pero para con el Excel Class.forName("sun.j

MD5 en Java (2)

Este realmente me pareció el más óptimo para crear un resumen MD5. Lo encontré en www.gravatar.com . 1 import java.io.UnsupportedEncodingException; 2 import java.security.MessageDigest; 3 import java.security.NoSuchAlgorithmException; 4 5 public class MD5Util { 6 7 public static String hex( byte [] array) { 8 StringBuffer sb = new StringBuffer(); 9 for ( int i = 0; i < array.length; ++i) { 10 sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); 11 } 12 return sb.toString(); 13 } 14 15 public static String md5Hex(String message) { 16 try { 17 MessageDigest md = 18 MessageDigest.getInstance( " MD5 " ); 19 return hex(md.digest(message.getBytes( " CP1252 " ))); 20 } catch (NoSuchAlgorithmException e) { 21 } catch (UnsupportedEncodingException e) { 22 } 23