miércoles, 15 de enero de 2014

Tutorial Java en Linux Basico 6

En este tutorial veremos Objetos.

Un Objeto es una instancia de una clase,un Objeto se puede tratar separado de los demás teniendo sus propios métodos y variables,para crear un método de una clase se usa la sintaxis:

Clase objeto = new Clase();

Lo que se pasa entre paréntesis es lo que recibe como argumentos el constructor.

Vayamos por partes:

La clase mas simple y que siempre se usa es donde esta el main,por ejemplo nuestro programa HolaMundo.java tiene esto adentro:


1
2
3
4
5
class HolaMundo {
    public static void main(String [] args) {
        System.out.println("Hola Mundo");
    }
}

Como ven pueden pensar que el main es el constructor,pero primero hay que saber que es un constructor,en mis palabras un constructor es:

Una función que se ejecuta antes que ninguna para inicializar o ejecutar acciones especificas.

En java todas las clases publicas deben tener el nombre del archivo que las contiene,en este caso HolaMundo,porque el archivo es HolaMundo.java.

Como crear un constructor?

El constructor es una función sin retorno y sin modificadores,esta debe tener el mismo nombre de la clase,vamos a crear un constructor para ese código:


1
2
3
HolaMundo(int x) {
    System.out.println("Hola se a creado el objeto numero "+x);
}


Este constructor lo único que hace es mostrar el numero de veces que se ha creado el archivo,basado en el paso por argumentos,veamos el código completo:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class HolaMundo {
    HolaMundo(int x) { // Constructor
        System.out.println("Hola se a creado el objeto numero "+x);
    }
    public static void main(String [] args) {
        System.out.println("Hola Mundo");
        for (int i = 1;i < 11;i++) {
            HolaMundo objeto = new HolaMundo(i); // Creamos objetos basados en el bucle
        }
    }
}


Eso demuestra como se crean los constructores y como es que se ejecutan,no es el mejor ejemplo y de hecho veo mala practica al usar una variable renovada en cada iteracion del bucle,pero eso no es lo que importa,lo que importa es ver como se ejecuta lo que esta adentro del constructor.

Algunas cosas que debemos saber de un constructor es que:

1. Siempre hay un constructor aunque no creemos uno javac lo hace por nosotros.

2. Puede haber mas de un constructor (overloaded;lo veremos mas adelante).

3. Repito, un constructor no lleva ni modificador y modificador de acceso.

Ahora si podemos ver algo un poco mas bueno que la mala practica de arriba,por ejemplo si queremos ver cuantas veces se ha creado un objeto usamos una variable static,como dije en el primer tutorial una variable de modificador static solo se crea una vez,solo una vez.

Algunas cosas que hay que saber o recordar de static:

1. No se considera OOP.

2. Solo se crea una vez.

3. Solo se pueden usar metodos static en métodos del mismo tipo de modificador(static),pero no así a la inversa.

4. Los métodos static en una clase se consideran métodos de clase y no métodos de objeto.

Veamos un ejemplo:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Ejemplo {
 private static int veces = 0;

 Ejemplo() {
  System.out.println("Hola se a creado el objeto numero " + veces);
  veces++;
 }

 public static void main(String[] args) {
  System.out.println("Hola Mundo");
  Ejemplo objeto = new Ejemplo();
  Ejemplo objeto1 = new Ejemplo();
  Ejemplo objeto2 = new Ejemplo();
 }
}


De ese modo podemos usar esa variable static para ver como cuantas veces se ejecuta,como dije los métodos static en una clase se llaman métodos de clase,para llamarlos no necesitamos crear un objeto,por ejemplo:


1
2
3
public static void getVeces() {
 System.out.println("Numero de objetos creados: "+veces);
}

Para usar este metodo no tenemos que instanciar un objeto y luego llamar el metodo:

Ejemplo objeto = new Ejemplo();

objeto.getVeces();

Aunque si funciona,lo que podemos hacer es:

Ejemplo.getVeces(); // Directamente

O mejor aun,las variables static se llaman variables de clase y podemos llamarlas asi:

Ejemplo.veces;

Código completo:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class Ejemplo {
 private static int veces = 0;

 Ejemplo() {
  System.out.println("Hola se a creado el objeto numero " + veces);
  veces++;
 }

 public static void main(String[] args) {
  System.out.println("Hola Mundo");
  Ejemplo objeto = new Ejemplo();
  Ejemplo objeto1 = new Ejemplo();
  Ejemplo objeto2 = new Ejemplo();
  Ejemplo.getVeces();
 }

 public static void getVeces() {
  System.out.println("Numero de objetos creados: "+veces);
 }
}


Como vemos estamos trabajando solo con la clase del main,pero como creamos nuevas,para crear otras clases podemos hacerlo de distintas maneras para distintas ocasiones,ya que podemos crear clases locales,anónimas,etc pero en este caso veremos clases normales,al gual que la que guarda el main.

Para crear una clase creamos un archivo en el mismo PATH(directorio) donde esta el main,en su momento también hablaremos de paquetes,pero de momento creen una clase,llamada Animales.java:

Esta clase va ademas de la que contiene el main que se llama Ejemplo.java:

vim Animales.java
La clase debe ser publica y el nombre debe ser el mismo del archivo:

public class Animales {

}

Vamos a crear unas funciones y variables para definir un animal,las cuales deben ser private:

Las variables private solo son visibles para la misma clase,objeto instanciado no lo podra llamar,lo cual hace que sean ocultadas para todo lo que no sea la misma clase,a esto se le conoce en el OOP como encapsulamiento.

Vamos a crear las variables:

private String especie;
private String sexo;
private boolean hambre = true;

Luego vamos a crear un constructor que reciba como parámetros las mismas variables,pero estas seran para definir las variables miembro(las de arriba):

Animales (String e,String s) {
       especie = e;
       sexo = s;
}

Ahora debemos crear una funcion que nos muestre el nombre,el sexo y si tiene hambre,ademas de una funcion para dar de comer:

Primero las funciones para ver el sexo y la especie,como son variables privadas no las podemos ver,asi que vamos a retornarlas como String,para ello tenemos que usar el token this,ya que this hace referencia a la variable del objeto actual,asi:

public String getEspecie() {
return this.especie;
}

Código completo:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Animales {
 private String especie;
 private String sexo;
 private boolean hambre = true;
 public Animales(String e,String s) {
  especie = e;
  sexo = s;
 }
 public String getSexo() {
  return this.sexo;
 }
 public String getEspecie() {
  return this.especie;
 }
 public void tienesHambre() {
  if (hambre)
   System.out.println("Tengo hambre :(");
  else 
   System.out.println("No tengo hambre :D");
 }
 public void darDeComer() {
  this.hambre = false;
 }
}

Como ven uso this para retornar,pero tambien se puede usar para definir,por ejemplo que los parámetros tuvieran el mismo nombre,usariamos this para hacer referencia a la variable miembro:


1
2
3
4
public Animales(String especie,String sexo) {
 this.especie = especie;
 this.sexo = sexo;
}

Ahora en la clase Ejemplo podemos crear un animal:


1
2
3
4
5
6
class Ejemplo {
 public static void main(String[] args) {
  Animales Mono = new Animales("Primate", "Macho");
  System.out.println(Mono.getEspecie());
 }
}

De esa manera hemos usado una clase mas ademas de la que contiene el main,podemos crear tantos animales como queramos y nuevos métodos,pero eso no es lo importante ahora ya que por ejemplo,en este ejemplo a la hora de comer se define en true,pero como vuelve a false(darle hambre de nuevo),pues esto lo veremos cuando veamos Threads,y como poder definir un animal mas especifico,esto lo veremos en herencia,pero de momento solo vimos como crear un objeto de una clase ajena al main.

Al ejecutar veremos esto:


Bien,algo que falta explicar en este tutorial basico de creación de objetos es la sobrecarga de métodos en la cual también veremos la sobrecarga de constructores:

En una clase puede haber distintos metodos con el mismo nombre,pero como se diferencian?

Con el simple hecho del paso por parametros:

Podemos tener estas dos funciones en la misma clase:


1
2
3
4
5
6
7
public void verNumero() {
 System.out.println(veces);
}
public void verNumero(String x) {
 System.out.println(x+veces);
 
}

Esto hará que podamos usar en el objeto:

Objeto.verNumero();

o

Objeto.verNumero("Veces creado : ");

Como dije lo único que lo distingue son los parametros,podriamos decir que lo distinguen los retornos,pero no,ya que el compilador no puede reconocer esto:


1
2
3
4
5
6
7
public void verNumero() {
 System.out.println(veces);
}
public int verNumero() {
 return veces;
 
}

Bien,de igual manera pasa con los constructores,podemos definir dos constructores para los Animales,supongamos esto,podemos darle de comer antes de crearlo,asi que así seria el constructor:


1
2
3
4
5
public Animales(String e,String s,boolean x) {
 especie = e;
 sexo = s;
 hambre = x;
}

Esto aun teniendo el constructor pasado, de esta manera podemos usar dos constructores:

new Animales("Primate", "Hembra");

o


new Animales("Primate", "Hembra",false);

Aunque no se obstruye uno con otro es recomendable iniciar todos los constructores,para ello usamos this,pero ahora con parámetros:

Por ejemplo llamamos:

Animales mono = new Animales("Primate", "Hembra");
En el constructor usamos this antes que nada:


1
2
3
4
5
public Animales(String e,String s) {
 this(e,s,false);
 especie = e;
 sexo = s;
}

El this inicia el otro constructor.

Como dije al principio podemos si no usamos constructores el compilador creara uno,si existen variables miembro sin iniciar,las cuales iniciaremos en un método,las variables se inician al valor por defecto:

Por ejemplo int 0,String u Objeto null,etc:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class Ejemplo2 {
 private int vint;
 private boolean vbool;
 private char vchar;
 private short vshort;
 private long vlong;
 private double vdouble;
 private String vString;
 
 public void ver() {
  System.out.println(vint);
  System.out.println(vbool);
  System.out.println(vchar);
  System.out.println(vshort);
  System.out.println(vlong);
  System.out.println(vdouble);
  System.out.println(vString);
 }
}

En el main:


1
2
3
4
5
6
7
class Ejemplo {
   public static void main(String[] args) {
   Ejemplo2 ejemplo = new Ejemplo2();
   ejemplo.ver();
   }

}

Aqui terminal la sexta parte de los tutoriales de Java.


Leer más...

Tutorial SQlite3 SELECT y WHERE

En esta ocasión aprenderemos como hacer uso de SELECT junto con WHERE usando la lógica de selección que aprendimos en el tutorial pasado:

Enlace

Primero que nada vamos a abrir una shell de SQLite y vamos a crear una base de datos:

sqlite3 Ejemplo.db

Y pegamos:


1
2
3
4
5
6
7
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE "Users" (id INTEGER,nombre TEXT,nucleo TEXT,sistema TEXT, version TEXT);
INSERT INTO "Users" VALUES(1,'atheyus','linux','ubuntu','14.04');
INSERT INTO "Users" VALUES(3,'usuario3','linux','gentoo',NULL);
INSERT INTO "Users" VALUES(4,'usuario4','darwin','MacOSX','Lion');
COMMIT;

Bien ya tenemos una tabla donde trabajar,para una selección normal vamos a usar:

SELECT * FROM Users;
De esta manera nos devuleve todas las columnas (*),de Users,si queremos un filtrado,por ejemplo queremos los nombres solamente pedimos el nombre:

SELECT nombre FROM Users;

Si queremos el nombre y el sistema usamos una coma:

SELECT nombre,sistema FROM Users;

Si queremos un orden podemos ordenar basado en una columna,usando la orden ORDER BY:

SELECT nucleo FROM Users ORDER BY nucleo;

Al final podemos agregar si lo queremos en modo ascendente ASC o descendente DESC;

SELECT nucleo FROM Users ORDER BY nucleo DESC;

Podemos limitar el numero de la salida de datos con el comando LIMIT:

Veamos como mostrar solo dos resultados:

SELECT nucleo FROM Users ORDER BY nucleo LIMIT 2;

Podemos filtrar el resultado para que solo muestre dos columnas pero se salte la primera,vamos a hacer esto:

Mostramos tres columnas pero nos saltamos la primera:

Primero añadimos mas usuarios para que se vea el uso bien hecho:

INSERT INTO "Users" VALUES(5,'usuario5','linux','Arch','rolling release');

INSERT INTO "Users" VALUES(6,'usuario6','linux','Debian','7');
Probamos:

SELECT * FROM Users ORDER BY nucleo;

Ahora si,para saltarnos las columnas usamos el numero a saltar primero y luego el numero a mostrar,divididos por comas:

SELECT nucleo FROM Users ORDER BY nucleo LIMIT 1,3;





Otra forma de hacer lo mismo es usando,OFFSET, seguido del numero a saltar,y LIMIT seguido del numero a mostrar:

 SELECT nucleo FROM Users ORDER BY nucleo LIMIT 3 OFFSET 1;
Usando WHERE, la clausula WHERE no es mas que un comprobador que se usa basado en respuesta lógica booleana,esto sera rápido ya que lo vimos en el tutorial pasado:

Mostrar todas las tablas con id mayor a 3:

SELECT * FROM Users WHERE id>3  ORDER BY id;
Mostrar todas las tablas con id mayor a 3 y que sea de núcleo linux:

SELECT * FROM Users WHERE id>3  AND nucleo='linux' ORDER BY id;
Mostrar todos los usuarios con nombre usuarionumero :

SELECT * FROM Users WHERE  nombre GLOB 'usuario?' ORDER BY id;

Eso es todo :D


Leer más...

martes, 14 de enero de 2014

Tutorial SQlite3 Operadores

Como prometí en el tutorial pasado vamos a aprender como se usa SELECT y WHERE de manera mas profunda,como debe de ser,pero primero que eso debemos conocer los operadores que usa SQLite3.

SQL no es un lenguaje de programación pero tiene algunos operadores similares a los de programación,por ejemplo bool,aritméticos,relacionales.

En la programación es muy muy importante saber usar bases de datos ya que es la forma mas recomendada de almacenar datos en una aplicación,sea web de escritorio móvil así que si tienen dudas de aprender SQLite yo se los recomiendo enteramente,ya que ademas de aprender a manejar un lenguaje SQL que luego nos servirá por ejemplo con MySQL,no necesita servidor y es muy portable.

Primero que nada vamos a abrir una shell para la demostración:

En terminal:

sqlite3

Los operadores son:

suma +

resta -

multiplicacion *

division /

residuo o modulo % 

Para usar estos comandos en sqlite solo tenemos que usar el comando SELECT:


1
2
3
4
5
6
7
SELECT 2+2; -- Suma

SELECT 1*2; -- Multiplicacion

SELECT 9/2; -- Division

SELECT 9%2; -- Division

En el caso de la suma,división y multiplicación es lo mas normal,en el caso del residuo muestra el resto de la multiplicación aproximada:

Por ejemplo:

9/2 = 8 

9-8 = 1

Acompañado de estos tenemos dos operadores unarios:

Sin operación + -- no-op 

Cambio negativo positivo - 

Para que esto funcione necesita estar entre paréntesis para no confundir con los operadores aritméticos:


1
2
3
4
5
SELECT +(2+2); -- no-op,no hace nada,no operation

SELECT -(2+2); -- Invierte,seria 4 ahora es -4

SELECT -(-2+-2); -- Invierte,seria -4 ahora es 4

Los operadores aritméticos pueden ser tan grandes como quieran,por ejemplo:

SELECT 1*3/2*8-8%5*88;
También tenemos los operadores booleanos,que son un poco mas usados,los cuales son:

AND -- Y

OR -- O

NOT -- No

A simple vista parecen solo traducciones del ingles al español,pero no,si tienen conocimientos en programación no es nada del otro mundo es lo mismo,el operador evalúa la expresión y regresa true si es verdadera y false si es falsa,en realidad:

En sqlite:

true es 1

y

false es 0

Veamos un ejemplo,el mas basico y ilustrativo:

SELECT 0 OR 1;
Aquí evalúa una expresión,es como si pusiéramos true or false,al haber un true (1) devuelve true(1),si fuera así:

SELECT 11 OR 10;
También devuelve true ya que son contiene valores no 0.

Veamos un false:

SELECT 0 OR 0;
Aquí mira 0 y como es 0,ve el siguiente 0 y como también es 0,devuelve 0.

El operador AND,este operador es mas estricto ya que es un Y,a lo que quiere decir que los dos valores sean true,el ejemplo mas ilustrativo:

SELECT 0 AND 1;
Devuelve false,ya que solo uno es 1,veamos un true:

SELECT 1 AND 1;

El operador NOT,este operador es una negación lógica,sirve por ejemplo para invertir el resultado:

 SELECT NOT 0 AND 1;
Devuelve true,ya que devolvería false pero al ser false se evalúa a true.

 SELECT NOT 1 AND 1;

Devuelve false,ya que normalmente devolvería true,pero como es una negación devuelve false.

Pueden pensar que son algo inútiles esos operadores,pero estos se complementan con los operadores relacionales,los cuales son:

> Mayor que

< Menor que

== o = Igual que

<> != No igual que

<= Menor o igual que

>= Mayor o igual que

Estos operadores por si mismos devuelven un bool,pero complementados con los operadores lógicos obtenemos un resultado mas especifico,vemos primero como se usan solos:


1
2
3
4
5
6
7
8
9
SELECT 1<10; -- True

SELECT 5>10; -- False

SELECT 10==10; -- True o SELECT 10=10;

SELECT 10<>10; -- False o SELECT 10!=10;

-- True es 1 y False es 0 en SQLite

Pueden hacer sus operaciones con mayor o igual y menor o igual que.

Vamos a ver un ejemplo usando todo lo aprendido hasta ahora:

SELECT 1*2==2*1 AND 1*6==3*2;

En ese caso primero multiplica 1 por 2 que da 3,luego ve si es igual a 2 por 1,que si es,después vemos un AND que hace que verifica para mostrar true que la siguiente expresión se también verdadera,que si es así.

Veamos mas ejemplos,no los explicare:

SELECT 1+4!=5 OR 4-2==2;

SELECT NOT 11+5!=51 OR 4-2==2;

Después tenemos los operadores sueltos,los cuales son operadores usados para cadenas de texto o otros cálculos,los cuales son:

|| Concatenar

GLOB Expresion estilo Unix

LIKE Expresion

IN en

Veamos la mas sencilla,concatenar:

SELECT 'Hola ' || 'Mundo!!!';
o

SELECT 'Tiempo' ||' '|| 'de' || ' ' || 'Tux';

Glob es igual que en Unix,por ejemplo los operadores * y ?:

Primero que nada abrimos una base de datos:

sqlite3 Ejemplo.db

Y pegamos lo que hicimos en el ejemplo anterior:


1
2
3
4
5
6
7
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE "Users" (id INTEGER,nombre TEXT,nucleo TEXT,sistema TEXT, version TEXT);
INSERT INTO "Users" VALUES(1,'atheyus','linux','ubuntu','14.04');
INSERT INTO "Users" VALUES(3,'usuario3','linux','gentoo',NULL);
INSERT INTO "Users" VALUES(4,'usuario4','darwin','MacOSX','Lion');
COMMIT;

Bien vamos a ver como seleccionaríamos a los usuarios de núcleo linux pero sin escribir todo:

SELECT * FROM Users WHERE nucleo GLOB 'lin*';

Es igual que en Unix,veamos el otro símbolo:

SELECT * FROM Users WHERE nucleo GLOB 'lin??';

Pueden ver ejemplos en Unix en este tutorial


El uso de LIKE,es similar pero con otros símbolos,el cual es %:

SELECT * FROM Users WHERE nucleo LIKE 'lin%';

Y el símbolo ? seria _ :

SELECT * FROM Users WHERE nucleo LIKE 'lin__';

IN,con el operador IN podemos encontrar un dato en lo que seria una lista de palabras entre paréntesis,por ejemplo:

SELECT * FROM Users WHERE nucleo IN ('linux','darwin');

Por ultimo tenemos los operadores a nivel bit los cuales son:

& AND bit

| OR bit

~ NOT bit

<< Desplazamiento a la izquierda

>> Desplazamiento a la derecha

Los números binarios tampoco son nada del otro mundo,del mundo de la informática :P,los números binarios son los que se usan en la informática el lenguaje nativo con comunicación de voltaje,estos son base dos 1 y 0,1 encendido 0 apagado,es un nivel muy muy bajo en la programación y aunque no es muy usual verlo en la programación de alto nivel o incluso en las sentencias SQL,nos esta de mas aprenderlo ya que los programas mas avanzados lo usan.

No voy a enseñar aquí como funciona eso de hecho recomiendo aprenderlo junto con C o NASM,pero bueno,vamos a ver como se usan los operadores:

Primero que nada vamos a transformar los números de notación decimal base 10,vamos a usar dos numeros en decimal con el mismo numero de digitos,10 y 15:

15 en binario es 1111

Y

10 en binario es 1010

Ahora vamos a usar el AND al igual que en la lógica común se basa en elgir los resultados true,en este caso serian los bits encendidos (a 1) y deben ser ambos:

& 1111
    1010
    1010

En este caso el resultado es 10 en decimal,1010 en binario ya que partimos los bits en uno:

1 AND 0 = 0

1 AND 1 = 1

1 AND 0 = 0

1 AND 1 = 1

En SQL:

SELECT 10&15;

Igualmente OR primero vemos el numero en binario y comparamos en uno:

SELECT 10|15;

El resultado es 15,ya que:

1 OR 0 = 1

1 OR 1 = 1

1 OR 0 = 1

1 OR 1 = 1


1111 en decimal es 15,veamos un ejemplo mas practico:

SELECT 100|99;

El resultado es 103 en decimal ya que:

100  99
1   |   1 = 1 
1   |   1 = 1
0   |   0 = 0
0   |   0 = 0
1   |   0 = 1
0   |   1 = 1
0   |   1 = 1

1100111 es 103 en decimal.

La negación se usa para invertir los resultados veamos:

SELECT ~10

Es -11 esto es un poco mas avanzado ya que usa la logica binaria,asi que les recomiendo este tutorial:

Enlace

Y este:

Enlace

El ultimo operador que nos falta es  el desplazamiento,de derecha o a izquierda:

El desplazamiento se usa agregando bits apagados a la derecha o quitandolos a la izquierda, especificados,por ejemplo desplazar a la izquierda n 2:

SELECT 10<<2 b="">

Es 40 en decimal ya que:

1010 << 2 = 101000 = 40 en decimal

En cambio :

SELECT 10>>2;
Es 2 en decimal ya que:

1010 >> 2 = 10 = 2 en decimal

Eso es todo,veremos como usar lo aprendido de manera practica en el siguiente tutorial.

Leer más...

lunes, 13 de enero de 2014

Tutorial SQlite3 Ejemplos

En la entrada pasada de estos tutoriales vimos cuales son los tipos de datos y cuales son los comandos DML y DDL,en esta ocasión vamos a ver como usar el DML y DDL para poder crear una base de datos con una tabla de datos.

Imaginemos que queremos administrar unos usuarios para nuestros pc's en el cual debemos introducir el id del usuario,el nombre el nucleo del sistema operativo y el nombre del sistema operativo.

Para eso vamos a crear una base de datos llamada Usuarios:

sqlite3 Usuarios.db

Como vemos esta vacía si mostramos las tablas:

.tables

Primero que nada vamos a crear una tabla con lo mencionado:

Para eso se usa el comando CREATE TABLE seguido del nombre de la tabla y luego entre paréntesis el contenido con esta sintaxis:

( nombre TIPO,nombre TIPO,etc)

Para lo mencionado arriba así seria:

CREATE TABLE Usuarios (id INTEGER,nombre TEXT,nucleo TEXT,sistema TEXT);

Ahora ya tenemos una tabla.para comenzar a insertar valores usamos el comando INSERT INTO la sintaxis es :

INSERT INTO Tabla VALUES (valor1,valor2);

Por ejemplo que me añadiera yo:

 INSERT INTO Usuarios VALUES (1,'atheyus','linux','ubuntu');

Esa es una inserción muy básica ya que por lo menos hubiéramos usado PRIMARY KEY pero veremos en su momento el uso mas avanzado.

Vamos a añadir mas:


INSERT INTO Usuarios VALUES (2,'usuario2','linux','arch');

INSERT INTO Usuarios VALUES (3,'usuario3','linux','gentoo');

INSERT INTO Usuarios VALUES (4,'usuario4','darwin','MacOSX');

Para ver los valores podemos usar la sentencia SELECT, la sintaxis es:

SELECT dato FROM Tabla;

Por ejemplo si queremos mostrar todos los usuarios:

SELECT nombre FROM Usuarios;


Podemos mostrar toda la información usando un asterisco (*) al estilo Unix:

SELECT * FROM Usuarios;

También podemos mejorar la interfaz,esto no es muy necesario ya que lo que importan son los datos y comandos DML y DDL ya que estos son mas de la shell de sqlite3,pero podemos usar por ejemplo:

.mode column

Junto con:

.headers on



Para que se vea muy legible, también podemos usar la que me gusta mas:

.mode line
O en menor escala podemos definir el separador por defecto(|):

.separator -

Bien eso como dije no es muy importante hablando de datos,pero es muy util para sentirse mas cómodo usando solo la shell de sqlite3.

Ya que tenemos datos en nuestra tabla,vamos a filtrar los resultados usando la clausula WHERE,que es como si fuera un if en Lenguaje de Programación(tambien existe IF en sql),sintaxis:

... WHERE condicion;

La clausula WHERE se puede usar de manera muy avanzada incluso vinculando otras tablas,usando condicionales etc WHERE y las clausulas mas importantes tendran su propio tutorial pero de momento estamos viendo ejemplos sencillos,vamos a ver como mostrar todos los datos de los usuarios que usen el núcleo linux:

 SELECT * FROM Usuarios WHERE nucleo='linux';
De ese modo mostrara todo.

Si quisiéramos mostrar solo los nombres usamos:

 SELECT nombre FROM Usuarios WHERE nucleo='linux';



De igual modo con los demás datos.

Ahora que sabemos como filtrar datos de esta manera podemos borrar parte de ellos usando el comando DELETE,por ejemplo borrar un usuario de la tabla(una columna),para ello vamos a borrar el de nombre usuario2:

DELETE FROM Usuarios WHERE nombre='usuario2'; -- No olvidar usar comillas simples
Si queremos modificar la tabla lo podemos hacer en cualquier momento usando ALTER TABLE,junto con la instrucción:

Ejemplo 1,añadir una columna a la tabla,por ejemplo que queremos añadir la version del sistema:

Nota: Para que no haya problemas con números vamos a usar una cadena de texto.

ALTER TABLE Usuarios ADD COLUMN version TEXT;
Ahora ya tenemos una nueva columna donde guardar los datos de la version,pero en todos los usuarios esta vacia,vamos a añadir datos haciendo un update con el comando UPDATE,sintaxis:

UPDATE Table SET column=valor WHERE condicion;

Por ejemplo voy a añadir que yo uso la version 13.10 y que el usuario de mac usa la version lion:


Añadir version de ubuntu a atheyus por nombre:

 UPDATE Usuarios SET version='13.10' WHERE nombre='atheyus';

 Añadir versión de Mac a usuario4 por id:

UPDATE Usuarios SET version='Lion' WHERE id=4;



El comando UPDATE no se usa solo si no hay contenido en una tabla también se usa para modificar existente,por ejemplo cuando salga Ubuntu 14.04 yo modifico mi versión:

 UPDATE Usuarios SET version='14.04' WHERE nombre='atheyus'

 Ejemplo 2,renombrar tabla.

Si quisieramos renombrar la tabla podemos hacerlo,vamos a ver como se hace.

Nuestra tabla se llama Usuarios,la sintaxis de SQL siempre es en MAYUSCULAS,no es necesario pero es recomendable para no confundir si no quisiéramos cambiar Usuarios por usuarios no seria necesario ya que SQL lo identifica pero si quisiéramos cambiar Usuarios por Users,haríamos esto:

ALTER TABLE Usuarios RENAME TO Users;
Ya casi hemos visto todos los comandos DML Y DDL,solo nos falta como borrar una tabla,para ello borrariamos todo lo visto en este tutorial,ahora nuestra tabla se llama Users,para borrarla solo usamos DROP TABLE antes del nombre de la tabla:

DROP TABLE Users;

Con eso nos quedamos sin tabla para el ejemplo y termina este tutorial :(

Nos falto CREATE INDEX.

Referencia : sqlite.org/
Leer más...

Como instalar iOS 7 en ipod touch 1g

Hace mucho que no coloco nada de iOS,eso va a cambiar ya que ya tenemos jailbreak para iOS 7,pero de momento vamos a ver como instalar iOS7 en el ipod touch 1g.

Este firmware es customizado,no es el real ya que necesitaría mucho hardware que no tiene para soportar el real,es una versión que esta hecha de modificaciones a base del jailbreak.

Que tenemos en esta versión?

Hemos visto como instalar iOS5 y 6 custom en este sitio,ahora la versión 7.

Gracias a Whited00r tenemos las siguientes características.

Fondo de pantalla en homscreen y lockscreen.

Multitarea al estilo iOS 5 y iOS7.

Nueva interfaz.

Control center.

Folders nuevos.

Y otras cosas mas como:

App time machine,con mas de 1000 apps compatibles con este firmware.

Terminal.

Recordatorios.

Youtube.

El estilo no me gusto mucho,pero bueno eso es en gustos,ademas de que tenido algunos errores menores.

Aun así si no les gusta o tienen problemas pueden regresar al custom iOS6 o 5 o incluso al iOS 3 original.


Primero que nada voy a hacer esto desde Windows,para eso descargamos el iOS custom:

Enlace

Nos descarga un zip.


Conectamos el iPod,si abre iTunes lo cerramos.

Lo descomprimimos,y abrimos el redsnow,le damos en extras->Pwned DFU.

Nos va a dar instrucciones  las seguimos para poner en modo DFU el iPod.

Ya en modo DFU abrimos iTunes y nos pedirá restaurar el iPod,le damos en restore,pero presionando shift en el teclado.

Luego elegimos el ipsw custom y listo,esperamos:



Y listo cuando termine lo registramos en itunes para poder usarlo:

Interfaz homscreen:



Interfaz Lockscreen:


Multitarea:

Estilo iOS 5


Control center:



Para mas información: www.whited00r.com


Leer más...

Solucion Ubuntu 13.10 cambia la distribucion del teclado

Hace un tiempo me esta pasando que ubuntu cambia la distribución del teclado latino por la de estados unidos (us),no he detectado el problema en si,pero podemos resolverlo de otra manera.

La manera es sencilla abrimos una terminal:

Ctrl+Alt+T

Y abrimos las aplicaciones de inicio:

Escribimos en la terminal:

gnome-session-properties & exit

Le damos añadir y añadimos esto:


En Nombre : Cambiar teclado

En orden : setxkbmap latam

En comentario : Lo que queamos




Luego guardamos.

En donde dice latam es la distribución del teclado,por ejemplo para españa seria es.

Eso es todo,cuando inicies sesión se cambiara automáticamente al teclado especificado.

Esto no sirve para el login o para las tty.ya que lo que acabamos de hacer solo se ejecuta al inicia Unity o Gnome Shell.

Leer más...

miércoles, 8 de enero de 2014

Manejo de Archivos en Java con File

En java contamos con una librería capaz de manejar algunas ordenes comunes del sistema operativo,tales como borrar,renombrar,ver permisos de un archivo.

En este tutorial vamos a aprender a usar este modulo para llevar a cabo dichas tareas:

Primero tenemos que importar la libreria necesaria:

import java.io.File;

Ahora vamos a ver un ejemplo sencillo,la clase que hace todo el trabajo es File,sus constructores son:

1
2
3
4
5
6
7
new File(pathname)

new File(uri)

new File(parent, child)

new File(parent, child)

Nosotros vamos a usar el primero,solo vamos a pasar el nombre de un archivo,por ejemplo vamos a crear uno:

Primero definimos un objeto file:

File archivo = new File("noexiste.txt");

Ahora usamos la función createNewFile(),regularmente podemos usar un comprobador,por ejemplo:


1
2
3
4
5
6
boolean accion = archivo.createNewFile();

if (accion)
   System.out.println("Se creo archivo");
else
   System.out.println("No creo archivo");	

Para esto necesitamos añadir un tratamiento de excepción IOException a la función que usa esta función:


1
2
3
4
5
6
public static void main(String[] args) throws IOException {
	File archivo = new File("noexiste.txt");
	boolean accion = archivo.createNewFile();
	if (accion)
		System.out.println("Se creo");
}

Ahora ya teniendo el archivo creado vamos a usar algunas mas para manipularlo:

Para saber si un archivo existe,usamos la funcion exists() que devuelve un boolean true si existe y false si no existe,por ejemplo crear un archivo si no existe:



1
2
3
4
5
if (!archivo.exists()) {
	boolean accion = archivo.createNewFile();
	if (accion)
		System.out.println("Se creo");
}


Vamos a ver como se pueden ver los permisos de archivo,los cuales son leectura,escritura y ejecucion,como lo hemos visto en Unix,las funciones devuelven un boolean basado en su pregunta:


1
2
3
4
5
canExecute(); // Se puede ejecutar?

canRead(); // Se puede leer?

canWrite(); // Se puede escribir?


Esta funcion checa los permisos:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
static void permisos (File x) {
	boolean sepuedeejecutar = x.canExecute();
	boolean sepuedeleer = x.canRead();
	boolean sepuedeescribir = x.canWrite();
	if (sepuedeejecutar)
		System.out.println("Se puede ejecutar");
	else
		System.out.println("No se puede ejecutar");
	if (sepuedeleer)
		System.out.println("Se puede leer");
	else
		System.out.println("No se puede leer");
	if (sepuedeescribir)
		System.out.println("Se puede escribir");
	else
		System.out.println("No se puede escribir");
}

Tambien contamos con una funcion para borrar un archivo la cual es delete(),esta devuelve un boolean en true si lo borra y en false si ocurre algo por lo cual no se borro,veamos una funcion que borra un archivo si existe:


1
2
3
4
5
6
7
if (!archivo.exists()) {
	boolean accion = archivo.delete();
	if (accion)
	   System.out.println("Se borro");
	else 
	   System.out.println("No se borro");
}

Ahora veamos el directorio padre del archivo y la ruta completa del archivo:

getAbsoluteFile() // Nos devuelve la ruta absoluta del archivo

getName() // Nos devuelve el nombre del archivo

Tambien contamos con otras funciones para ver si esta oculto el archivo o si es un archivo:

isFile() // Devuelve true si es un archivo

isHidden() // Devuelve true si esta oculto

Ahora vamos a ver lo mismo pero con directorios:

Crear un directorio:

Para crear un directorio se usa mkdir:

archivo.mkdir();

Para saber si existe usamos igualmente exist(),funcion para crear un directorio si no existe:


1
2
3
4
5
if (!archivo.exists()) {
	boolean accion = archivo.mkdir();
	if (accion)
		System.out.println("Se creo directorio");
}


Los permisos son los mismos de arriba menos execute().

canRead(); // Se puede leer?

canWrite(); // Se puede escribir?

Para saber el nombre del directorio podemos usar:

getPath()

o

getName()

Podemos ver los archivos que contiene un directorio iterando sobre lo que devuelve la funcion list(),que es un array de String:

Funcion para listar:


1
2
3
4
5
static void listar(File x) {
	String[] archivos = x.list();
	for (String a : archivos)
		System.out.println(a);
}

También podemos usar un filtro(lo veremos en su momento),de momento podemos ver como listar un directorio basado en una extensión:


1
 2
 3
 4
 5
 6
 7
 8
 9
10
FilenameFilter filtro = new FilenameFilter() {	
	@Override
	public boolean accept(File dir, String name) {
		// TODO Auto-generated method stub
		 String extension = ".txt";
		if (name.toLowerCase().endsWith(extension))
			return true;
		return false;
	}
};


Y hacemos esto:

String[] archivos = x.list(filtro);

Podemos hacer lo mismo pero en vez de que nos devulva un simple string,nos devuelva un objeto File,con todas las funciones aqui vistas:

listFiles();

Para cambiar el nombre de un archivo tenemos que crear otro objeto File y llamar el método renameTo:

File nuevo = new File("Nuevo nombre");
archivo.renameTo(nuevo);

Eso es todo :D

Mas info : http://docs.oracle.com/javase/6/docs/api/java/io/File.html
Leer más...