el archivo hibernate.cfg.xml establece los parametros de conexion a la base de datos y las classes que se nescesitan mapear, pero si este archivo se encuentra dentro de nuestra aplicacion y la queremos distribuir en forma de jar, hay un problema, el usuario tendria que tener instalada su base de datos con el usuario y contraseña que nosotros hubieramos establecido en el codigo. de otro modo tendria que compilarse la aplicacion para cada persona que le demos el programa, cada vez con usuario y contraseña distintos.
una solucion es usar un archivo con extension .properties, donde se establecen los parametros de conexion dejando en el hibernate.cfg.xml solo el mapeo de clases.
el archivo .properties debera contener por ejemplo lo siguiente*
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
*http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html
el hibernate.cfg.xml queda solo con (por ejemplo)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.show_sql">true</property>
<mapping class="dto.Grupo" ></mapping>
<mapping class="dto.Contacto" ></mapping>
<mapping class="dto.ContactoGrupo" ></mapping>
<mapping class="dto.Usuario" ></mapping>
</session-factory>
</hibernate-configuration>
y en nuestro codigo java
try {
Properties properties = new Properties();
properties.load(new FileInputStream("miarchivo.properties"));
Configuration cfg = new AnnotationConfiguration().configure(); //esta linea lee a hibernate.cfg.xml
cfg.addProperties(properties); //esta otra lee el properties
sessionFactory = cfg.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
tambien puede dejarse el archivo hibernate.cfg.xml fuera de la aplicacion pero el usuario veria informacion que no le interesa como el mapeo de classes (pero no deja de ser otra opcion)
blog de sergio
domingo, 9 de diciembre de 2012
domingo, 9 de septiembre de 2012
Stack java (pila)
la clase Stack de java.utils ofrece una estructura de datos tipo pila con, con el metodo peek se accede a su tope y con pop() se elmina el tope
public static void main(String[] args) {
Stack pila = new Stack();
System.out.println(pila.isEmpty());
pila.add("luisa");
pila.add("pepe");
pila.add("toño");
pila.add("mario");
System.out.println("tope de pila:"+pila.peek());
System.out.println("eliminando :"+pila.pop());
System.out.println("tope de pila:"+pila.peek());
}
resultado de la ejecucion
run:
true
tope de pila:mario
eliminando :mario
tope de pila:toño
public static void main(String[] args) {
Stack pila = new Stack();
System.out.println(pila.isEmpty());
pila.add("luisa");
pila.add("pepe");
pila.add("toño");
pila.add("mario");
System.out.println("tope de pila:"+pila.peek());
System.out.println("eliminando :"+pila.pop());
System.out.println("tope de pila:"+pila.peek());
}
resultado de la ejecucion
run:
true
tope de pila:mario
eliminando :mario
tope de pila:toño
Hashtable java
la clase Hastable crea una estructura de clave - valor, el siguiente metodo crea una hashtable con claves int y valores String
1 -> pepe
2 -> luis
3 -> maria
public static void main(String[] args) {
Hashtable hashTable= new Hashtable();
hashTable.put(1, "juan");
System.out.println("valor de la clave 1:"+hashTable.get(1));
hashTable.put(1, "pepe");
System.out.println("remplazando el valor de la clave 1:"+hashTable.get(1));
hashTable.put(999, "luis");
hashTable.put(7, "maria");
System.out.println("¿contiene clave 7?:"+hashTable.containsKey(7));
System.out.println("eliminando");
hashTable.remove(999);
System.out.println(hashTable.get(999));
}
el resultado de la ejecucion
run:
valor de la clave 1:juan
remplazando el valor de la clave 1:pepe
¿contiene clave 7?:true
eliminando
null
Listas con java
public static void main(String[] args) {
List<String> listaNombres = new ArrayList<String>();
listaNombres.add("juan");
listaNombres.add("pepe");
listaNombres.add("maria");
System.out.println("tamaño:"+listaNombres.size());
System.out.println("tercer elemento:"+listaNombres.get(2));
System.out.println("Eliminando elemento <maria>");
listaNombres.remove("maria");
System.out.println("tamaño:"+listaNombres.size());
System.out.println("todos");
for(String nombre:listaNombres){
System.out.println(nombre);
}
}
resultado en consola
tamaño:3
tercer elemento:maria
Eliminando elemento <maria>
tamaño:2
todos
juan
pepe
Expresiones regulares, validacion con java regex
java tiene una api para la validacion de expresiones regulares, el siguiente metodo valida que la string sea un mail de gmail.com
public static boolean isCorreoGmail(String correo) {
Pattern pat =Pattern.compile("^([0-9a-zA-Z]([_.w]*[0-9a-zA-Z])*@gmail.com)$");
Matcher mat =pat.matcher(correo);
if (mat.find()) {
System.out.println("[" + mat.group() + "]");
return true;
}
return false;
}
public static boolean isCorreoGmail(String correo) {
Pattern pat =Pattern.compile("^([0-9a-zA-Z]([_.w]*[0-9a-zA-Z])*@gmail.com)$");
Matcher mat =pat.matcher(correo);
if (mat.find()) {
System.out.println("[" + mat.group() + "]");
return true;
}
return false;
}
Construct | Description |
---|---|
[abc] | a, b, or c (simple class) |
[^abc] | Any character except a, b, or c (negation) |
[a-zA-Z] | a through z, or A through Z, inclusive (range) |
[a-d[m-p]] | a through d, or m through p: [a-dm-p] (union) |
[a-z&&[def]] | d, e, or f (intersection) |
[a-z&&[^bc]] | a through z, except for b and c: [ad-z] (subtraction) |
[a-z&&[^m-p]] | a through z, and not m through p: [a-lq-z] (subtraction) |
Construct | Description |
---|---|
. | Any character (may or may not match line terminators) |
\d | A digit: [0-9] |
\D | A non-digit: [^0-9] |
\s | A whitespace character: [ \t\n\x0B\f\r] |
\S | A non-whitespace character: [^\s] |
\w | A word character: [a-zA-Z_0-9] |
\W | A non-word character: [^\w] |
Greedy | Reluctant | Possessive | Meaning |
---|---|---|---|
X? | X?? | X?+ | X , once or not at all |
X* | X*? | X*+ | X , zero or more times |
X+ | X+? | X++ | X , one or more times |
X{n} | X{n}? | X{n}+ | X , exactly n times |
X{n,} | X{n,}? | X{n,}+ | X , at least n times |
X{n,m} | X{n,m}? | X{n,m}+ | X , at least n but not more than m times |
Boundary Construct | Description |
---|---|
^ | The beginning of a line |
$ | The end of a line |
\b | A word boundary |
\B | A non-word boundary |
\A | The beginning of the input |
\G | The end of the previous match |
\Z | The end of the input but for the final terminator, if any |
\z | The end of the input |
javadoc con annotations
En netbeans y otros IDE puede ponersele una explicacion a los metodos y clases para algun otro usuario que valla a utilizar nuestro codigo
/**
* La explicacion que se ponga en este espacio es la que
* aparece con ctr - space en netbeans
* se debe poner una etiqueta param para cada parametro que reciba
* @param dia true es para dia y false para noche
* @param ingles true es para ingles y false para español
* @return un saludo en español o ingles, para el dia o para la noche
*/
public String getSaludo(boolean dia, boolean ingles){
if(dia && ingles){
return "good days";
}else if(dia && !ingles){
return "buenos dias";
}else if(!dia && ingles){
return "good nights";
}else{
return "buenas noches";
}
}
public void test(){
String saludo=getSaludo(true, false);
System.out.println(saludo);
}
leer archivo con java
JFileChooser chooser= new JFileChooser();
chooser.setDialogTitle("seleccione un block de notas");
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int sel = chooser.showOpenDialog(this);
if (sel == JFileChooser.APPROVE_OPTION){
File selectedFile = chooser.getSelectedFile();
String cadena="";
try {
FileInputStream fis = new FileInputStream(selectedFile);
int ch;
while((ch= fis.read()) != -1){
cadena=cadena+ (char)ch;
}
} catch (Exception ex) {
System.out.println("error en la lectura del archivo");
}
this.jTextField1.setText(cadena);
}
Suscribirse a:
Entradas (Atom)