|
|
Universidad Carlos III de Madrid - Departamento de Ingeniería Telemática |
|
| Localización | Personal | Docencia | Investigación | Novedades | Intranet |
|
Objetivo de esta página
|
Secciones |
Fecha de publicación: 19-11-2007
Cuando una aplicación Java está organizada en paquetes, se recomienda seguir el siguiente procedimiento para compilarla y ejecutarla.
El código fuente debe estar organizado en directorios y subdirectorios de acuerdo al paquete al cual pertenezca cada clase. El siguiente ejemplo muestra una posible distribución del código de la aplicación:
noticiasswing/
|
|---src/
| |
| |---beans/
| | |
| | |---Noticia.java
| | |---Usuario.java
| |
| |---interfaz/
| |
| |---VentanaPrincipal.java
| |---DialogoNuevaNoticia.java
| |---votaciones/
| |
| |---VerVotacion.java
|
|---lib/
| |
| |---mysql-connector.jar
|
|---classes/
Las clases Noticia y Usuario están, en
el ejemplo, en el paquete beans. Las clases
VentanaPrincipal y
DialogoNuevaNoticia, en el paquete
interfaz. La clase VerVotacion
está en el paquete interfaz.votaciones.
Es recomendable generar las clases compiladas en un directorio
distinto al que almacena el código fuente. Para ello, debe
compilarse de la siguiente forma, desde dentro del directorio
noticiasswing/src:
javac -cp ../lib/mysql-connector.jar:../classes -d ../classes beans/*.java interfaz/*.java interfaz/votaciones/*.java
Si se ejecuta el comando javac sin parámetros, este
indica qué significa cada una de las opciones anteriores.
Una vez compilado, los ficheros compilados (.class)
aparecen automáticamente en el directorio classes,
organizados en subdirectorios de acuerdo al paquete al cual
pertenezcan:
noticiasswing/
|
|---src/
| |
| |---beans/
| | |
| | |---Noticia.java
| | |---Usuario.java
| |
| |---interfaz/
| |
| |---VentanaPrincipal.java
| |---DialogoNuevaNoticia.java
| |---votaciones/
| |
| |---VerVotacion.java
|
|---lib/
| |
| |---mysql-connector.jar
|
|---classes/
|
|---beans/
| |
| |---Noticia.class
| |---Usuario.class
|
|---interfaz/
|
|---VentanaPrincipal.class
|---DialogoNuevaNoticia.class
|---votaciones/
|
|---VerVotacion.class
Suponiendo que la clase VentanaPrincipal tuviese
el método main, se ejecutaría de la siguiente
forma, desde el directorio noticiasswing/src
(se puede cambiar el
directorio actualizando convenientemente las rutas relativas en
el comando):
java -cp ../lib/mysql-connector.jar:../classes interfaz.VentanaPrincipal
Fecha de publicación: 10-11-2006
Aunque MySQL lo permite, no se debe, en principio, establecer directamente, en una consulta de inserción de una nueva fila, un valor para un identificador declarado como AUTO_INCREMENT. Es más sencillo y seguro dejar que MySQL calcule automáticamente dicho identificador.
Tal y como se indica en el manual de referencia de MySQL 5.0, el gestor de bases de datos MySQL calculará e introducirá automáticamente un identificador declarado como AUTO_INCREMENT en tablas InnoDB si en la sentencia INSERT se proporciona NULL o 0 como valor de dicho campo.
A pesar de que las dos opciones anteriores funcionan
correctamente desde el cliente
de línea de comandos mysql, el conector MySQL Connector/J 5.0.4
no permite proporcionar un valor NULL a un campo AUTO_INCREMENT.
Por tanto, la única opción es introducir el valor '0' en consultas INSERT
realizadas desde la aplicación Java con este conector. Por ejemplo:
insert into Tecnico values ('0','José García','jose','miclave','910000000');
En el ejemplo anterior, el gestor de bases de datos calculará automáticamente cuál es el siguiente identificador libre y lo asignará al campo 'idTecnico'.
Fecha de publicación: 23-11-2006
La forma más sencilla y recomendable de que se muestre
la cabecera de una tabla
JTable consiste en insertar la tabla dentro de
un componente JScrollPane. Este se encarga automáticamente
de mostrar la cabecera:
JScrollPane scrollPane = new JScrollPane(table); table.setPreferredScrollableViewportSize(new Dimension(500, 70));
La otra alternativa (sin JScrollPane)
consiste en obtener una referencia a la
cabecera de la tabla con el método JTable.getTableHeader()
e insertarla en el contenedor que se esté utilizando, como si fuese
un componente más:
container.setLayout(new BorderLayout()); container.add(table.getTableHeader(), BorderLayout.PAGE_START); container.add(table, BorderLayout.CENTER);