[Métodos] Como verificar que exista una conexión a internet desde Java

Cómo verificar que exista una conexión a internet desde Java




Para verificar que exista una conexión a internet con java, existen 3 enfoques:


  • No comprobar nada
  • Conectar a algun sitio con java.net.InetAddress
  • Utilizar java.lang.Process para hacer un ping



No hacer nada



Asi es, ¿para qué comprobamos que exista un conexión a internet?

Para evitar ejecutar un proceso que requiera del acceso a internet cuando no está disponible. Pero todo método de conexión a la red lanzará una exception de entrada/salida cuando esto no sea posible, teniendo que ser concientes ubicar la lógica en procesos de reconexión. De lo contrario estariamos testeando gratuitamente el acceso a los servidores de google o algun otro sitio irrelevante, sin asegurar que la conexión a la cual queremos acceder siga sin estar disponibles.

Si el sitio al que queremos acceder podemos tener el control, es aceptable enviar un pequeño resquest a un endpoint que devuelve una sencilla respuesta para garantizar que la comunicación es posible, al estilo 'ping'-'pong'




InetAddress.isReachable()



InetAddress representa una dirección de protocolo de internet (Internet Protocol o IP), se instancia a través de la su método éstatico InetAddress.getByName(String host), pasando en el string de parámetro una ip.

El método de interés es isReachable(int timeout), el cuál recibe un tiempo de espera para determinar si es posible conectarse a el sitio especificado en la instancia.


     public static void sendPingRequest(String ipAddress) throws IOException {
        imprimir("Enviando solicitud Ping a: " + ipAddress);
        InetAddress inetAddress = InetAddress.getByName(ipAddress);

        if (inetAddress.isReachable(5000)) {
            System.out.println("El destino es alcanzable");
            System.out.println("Canonical HostName: " + inetAddress.getCanonicalHostName());
            System.out.println("HostName: " + inetAddress.getHostName());
            System.out.println(inetAddress.toString());
        } else {
            System.out.println("No se pudo alcanzar este sitio!");
        }
    }
 

Ejecutando este método con localhost '127.0.0.1', la ip de google argentina '172.217.162.3' y esta la invertimos un poco '172.162.217.30'


Sending Ping Request to 127.0.0.1
Host is reachable
Canonical HostName: 127.0.0.1
HostName: 127.0.0.1
127.0.0.1/127.0.0.1



java.lang.Process



Process representa un proceso nativo del sistema instanciada por ProccessBuilder que recibe como argunmentos en su constructor una lista de String siendo cada uno de ellos una instrucción a ejecutar, muy similar a ejecutar un linea de comandos.


    public static void commands(String ipAddress) throws IOException {
        List<String> commandList = new ArrayList<>();
        commandList.add("ping");
        commandList.add(ipAddress);

        ProcessBuilder build = new ProcessBuilder(commandList);
        Process process = build.start();

        InputStream isin = process.getInputStream();
        Reader readerIsin = new InputStreamReader(isin);
        BufferedReader input = new BufferedReader(readerIsin);
        InputStream iser = process.getInputStream();
        Reader readerIser = new InputStreamReader(iser);
        BufferedReader error = new BufferedReader(readerIser);
        String s = null;

        System.out.println("Standard output: ");
        while ((s = input.readLine()) != null) {
            System.out.println(s);
        }

        if((s = error.readLine()) != null) {
            System.out.println("Errors output: ");
            do {
                System.out.println(s);
            } while ((s = error.readLine()) != null);
        }
    }
 

Standard output:

Haciendo ping a 127.0.0.1 con 32 bytes de datos:
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128

Estad¡sticas de ping para 127.0.0.1:
Paquetes: enviados = 4, recibidos = 4, perdidos = 0
(0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
M¡nimo = 0ms, M ximo = 0ms, Media = 0ms

[MySQL] Mas Funciones MySQL - FIRST - LAST - UCASE - LCASE - MID - LENGTH - ROUND - NOW

Otras funciones que resultaria interesante ir conociendo, para hallar un registro de una columna acorde al primer y ultimo caracter o número, pasarlo a mayúsculas o minúsculas, hacer una subcadena, medir su longitud, redondear números, obtener el tiempo o darle un formato son:

  • FIRST()
  • LAST()
  • UCASE()
  • LCASE()
  • MID()
  • LENGTH()
  • ROUND()
  • NOW()




FIRST() y LAST()


Las declaraciones FIRST y LAST nos permite encontrar el primer registro alfabético ó númerico y el ultimo respectivamente.
Su sintaxis tiene la forma:

SELECT FIRST(nombre_columna) FROM nombre_tabla;

El 'primero' o el 'último' se refiere simplemente a quien tenga el primer caracter del alfabeto o númerico.
Por ejemplo, podemos obtener el último 'ID' para conocer cúal sería el siguiente. Otro ejemplo

  SELECT FIRST (pais) AS 'Primer país' , LAST (pais) AS 'Último país' FROM dar10.usuarios ;

De tener una lista con todos los paises habidos y por haber el resultado podria ser el siguiente:

Primer país Último país
Abjasia Zimbabue





UCASE() y LCASE()


Las funciones UCASE y LCASE nos permite convertir las cadenas de caracteres a 'minúsculas' ó 'mayúsuclas' respectivamente independientemente de la forma en que haya sido guardadas.
Donde UCASE significa 'UPPER-CASE' (mayúsculas) y LCASE se refiere a 'Lower-Case' (minúsculas).

Su sintaxis tiene la forma:

SELECT UCASE(nombre_columna) FROM nombre_tabla;

El 'primero' o el 'último' se refiere simplemente a quien tenga el primer caracter del alfabeto o númerico.
Por ejemplo, podemos obtener el último 'ID' para conocer cúal sería el siguiente. Otro ejemplo

  SELECT UCASE (pais) AS 'En Mayúsculas' , LCASE (pais) AS 'En Minúsculas'
FROM dar10.usuarios WHERE id = 1;

Estas funciones nos convierten las cadenas de caracteres a mayúculas ó minúsculas independientemente de como estén escritas en la base.

En Mayúsculas En Minúsculas
ARGENTINA argentina

Como es natural, estas funciones solo funcion convirtiendo caracteres alfabeticos y no númericos, por lo cual no tendrá efecto sobre estos últimos caracteres.





MID()


La funcion MID funciona de la misma manera que como lo hace el método
public String substring(int beginIndex, int endIndex) de la clase String .

Su sintaxis tiene la forma:

SELECT MID(nombre_columna, indice_inicio, indice_fin) FROM nombre_tabla;

Del mismo que el método substring la funcion MID recibe 2 parametros adicionales al nombre de la columna a la cual quiero fraccionar la cadena de caracteres. Por ejemplo, una forma sencilla de obtener un sufijo o abreviatura de un pais en nuestra base de datos seria:

  SELECT MID (pais, 1, 3) AS 'abreviatura' , pais FROM dar10.usuarios;


abreviatura pais
arg argentina
bra brasil
bol bolivia
chi chile
col colombia
ecu ecuador
par paraguay
per perú
uru uruguay
ven venezuela

A diferencia de java, el indice NO comienza por cero sino por uno.
El segundo se puede obviar ya que por defecto es la longitud total de la cadena.





LENGTH()


La funcio LENGTH se utliza para medir la longitud total del campo de la columna ingresada.

Su sintaxis tiene la forma:

SELECT LENGTH(nombre_columna) FROM nombre_tabla;

  SELECT LENGTH (pais) AS 'Longitus' , pais FROM dar10.usuarios WHERE id = 1;


Longitud pais
9 argentina

Como es natural, estas funciones solo funcion convirtiendo caracteres alfabeticos y no númericos, por lo cual no tendrá efecto sobre estos últimos caracteres.





ROUND()


La funcion ROUND nos sirve para redondear las columnas que contengan principalmente los tipo DOUBLKE FLOAT DECIMAL, etc

Su sintaxis tiene la forma:

SELECT ROUND(nombre_columna) FROM nombre_tabla;

Por supuesto al no encontrar valores decimales o aplicarlos a cadena de caracteres, nos devolvera '0'. un pequeño ejemplo:

  SELECT ROUND (precio) AS 'Redondeado' , precio FROM dar10.venta ;

Estas funciones nos convierten las cadenas de caracteres a mayúculas ó minúsculas independientemente de como estén escritas en la base.

Redondeado precio
9.99 10
1.5 2
33.11 33






NOW()


La funcion NOW nos genera un registro adicional util para determinar en la tabla la fecha de la consulta. tiene el formato
yyyy-MM-dd HH:mm:ss
Su sintaxis tiene la forma:

NOW()

Esta funcion no recibi parametros, y puede llegar a ser util para agregar informacion a la consulta, No tiene mucho sentido ejecutarla sola ya que nos devolviria la misma informacion una y otra vez hasta alcanzar el número de registros totales

  SELECT NOW () AS 'Fecha de consulta' , pais FROM dar10.usuarios;

Fecha de consulta pais
2016-08-23 20:39:59 argentina

Como es natural, estas funciones solo funcion convirtiendo caracteres alfabeticos y no númericos, por lo cual no tendrá efecto sobre estos últimos caracteres.





[MySQL] Funciones de Agrupamiento COUNT - SUM - MAX - MIN - AVG

Funciones de agrupamiento

Los motores de base de datos nos ofrece funciones preestablecidas para agrupar los resultados de nuestras consultas para asi poder sumar numericamente, establecemer un maximo o un minimo, promediar, etc.
Estas funciones de agrupamiento son:
  • COUNT()
  • SUM()
  • MAX()
  • MIN()
  • AVG()
Todas estas funciones se usan junto con la declaración 'SELECT FROM', su sintaxis tiene la forma:

SELECT FUNCION(nombre_columna) FROM nombre_tabla;




COUNT()


La declaración COUNT nos permite contar literalmente la cantidad de registro que iremos encontrando para una columna que especificamos como parámetro de la función.
Su sintaxis tiene la forma:

SELECT COUNT(nombre_columna) FROM nombre_tabla;

La forma de usar esta funcion es con la declaración SELECT, nombrar a la funcion

  SELECT COUNT (pais) FROM dar10.usuarios ;

Esta consulta nos devolverá la cantidad total de registros que contenga la tabla, aunque sus registros sean nulos , los cuenta igual.
Lo interesante de esta funcion es aplicar algunas condiciones como contar la cantidad de registros que contenga tal valor en una columna, como por ejemplo:

  SELECT COUNT (pais) FROM dar10.usuarios WHERE pais = 'argentina' ;





SUM()


La declaración SUM nos permite sumar númericamente valores para una columna que especificamos como parámetro de la función.
Su sintaxis tiene la forma:

SELECT SUM(nombre_columna) FROM nombre_tabla;

SUMAR no implica explicitamente valores del tipo numericos, se puede hacer con columnas que contengan valores puramente letras, es decir del tipo alfanumericos.

  • Si lo hacemos con columnas que no contienen numeros, la suma dará el resultado de '0' (Cero)
  • Si lo aplicamos a campos que contienen valores alfanumericos, nos sumará solamente los números, aunque probablemente nos dará un resultado que no esperemos.
  • Lo mas normal, es usar la declaración SUM con columnas del tipo númerico.

  SELECT SUM (edad) AS 'Suma de edades' FROM dar10.usuarios WHERE edad => 15 ;





MAX() - MIN()


La declaraciones MAX y MIN nos dice a simple vista que que es lo que hacen.
Su sintaxis es igual a las anteriores:

SELECT MAX(nombre_columna) FROM nombre_tabla;

Al que SUMAR, para encontrar el maximo o minimo nos referimos a valores numericos, o alfanumericos pero solo tomara la parte numerica si la hay, de lo contrario el resultado será vacio. Ejemplo.


  SELECT MAX (edad) AS 'Maximo' , MIN (id) AS 'Minimo' FROM dar10.usuarios ;

NOTA: al tratarse de columnas, se separan mediantes comas ',' independientemente o no que se le apliquen funciones para su visualización.





AVG()


AVG es una abreviación de 'average' a lo que en español viene siendo 'promedio'.

Al igual que el resto de las funciones 'númericas' funciona mejor con columnas que sean de ese tipo, para columnas alfanumericas, solo tomará en cuenta esa parte y para los caracteres saldra un resultado de vacio. Ejemplo:

SELECT AVG(nombre_columna) FROM nombre_tabla;

Un pequeño ejemplo:

  SELECT AVG (edad) AS 'Promedio de Edades' FROM dar10.usuarios ;





[Métodos] Abrir un navegador desde Java

Abrir navegador predeterminado con Java


Para abrir un un navegador con código en java, bastará con pensar un poco y con saber:



Determinar Sistema


Muy resumidamente para determinar el sistema:

 System.getProperty("os.name");

Utilizar consola para abrir un ejecutable


  • Para abrir el navegador por defecto que tenga instalado 'windows'

    rundll32 url.dll,FileProtocolHandler + url

  • Para hacer lo propio en la termina de algunas de las distribuciones de 'linux'

    x-www-browser + url
    xdg-open + url
    sensible-browser + url

  • En sistemas operativos de la marca de la manzanita, como 'OSX'

    open + url

Ejecutar Consola con código java


Para ejecutar la consola desde java se utiliza el siguiente trozo de código donde el comando depende del sistema operativo.

 Runtime.getRuntime().exec(String command);




Abrir navegador predeterminado con código java


Para poder tener unos metodos, los cuáles abran una ventana del navegador predeterminado del sistema o uno especifico a la url que le definamos como parámetro:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.zubaray;
import java.io.IOException;

public class OpenBrowser {
    private String direccion = "https://dar10comyr.blogspot.com.ar/";

    //NAVEGADOR POR DEFECTO POR SISTEMA
    public void abrirNavegadorPredeterminadorWindows(String url) throws IOException{
        Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
    }
    public void abrirNavegadorPredeterminadorLinux(String url) throws IOException{
        Runtime.getRuntime().exec("xdg-open " + url);
    }
    public void abrirNavegadorPredeterminadorMacOsx(String url) throws IOException{
        Runtime.getRuntime().exec("open " + url);
    }

    //NAVEGADOR POR DEFECTO GENERICO
    public void abrirNavegadorPorDefecto(String url) throws IOException{
        String osName = System.getProperty("os.name");
        if(osName.contains("Windows"))
            abrirNavegadorPredeterminadorWindows(url);
        else if(osName.contains("Linux"))
            abrirNavegadorPredeterminadorLinux(url);
        else if(osName.contains("Mac OS X"))
            abrirNavegadorPredeterminadorMacOsx(url);
        else{ //INFORMAR SISTEMA NO SOPORTADO }
    }

    // MAIN
    public static void main(String[] dar10) throws IOException {
        OpenBrowser op = new OpenBrowser();
        op.abrirNavegadorPorDefecto(op.direccion);
    }
}

[MySQL] INSERT - UPDATE - DELETE

Para llevar a cabo las tareas de consulta o modificación de los datos contenidos en las Bases de Datos se utiliza el Lenguaje de Manipulación de datos, conocido por sus siglas en inglés DLM ('Data Language Manipulation'). Esas clausulas son, ademá de Select: INSERT; UPDATE y DELETE


Recordar que por otra parte para definir el contenido de la base de datos, se utiliza el Lenguaje de Definición de Dato, conocido por sus siglas en inglés DDL (' Data Definition Language'), las cuales era: CREATE, ALTER y DROP




INSERT


La declaración INSERT nos permite insertar registro en nuestra tabla de la base de datos.
Seguida de la declaracion INTO mas el nombre de la tabla, solo hay que tener en cuenta que hay el valor de campos en el orden en que fueron espeficados y que sólo NO podrán omitirse aquellos que fueron declarados NOT NULL
Su sintaxis tiene la forma:

INSERT INTO nombre_tabla
VALUES (valor1,valor2,valor3,...);

Otra variente es tambien especficar el nombre de las columnas se utilizan:

INSERT INTO nombre_tabla (nombre_columna1, nombre_columna2, nombre_columna3, ...)
VALUES (valor1,valor2,valor3,...);

NOTA: Hay que notar que el campo ID es utoincremental, por ende tomará el siguiente valor al ultimo que se haya ingresado o bien el ultimo según esté configurado.
Pequeño ejemplo:

  INSERT INTO `dar10`.`usuarios` (`nombre_usuario`, `mail`, `pais`)
VALUES ('dar10', 'dar10@comyr', 'argentina');

Valores NULL y NOT NULL

null significa "dato desconocido" o "valor inexistente".
No es lo mismo que un valor 0, una cadena vacía o una cadena literal "null" es decir que contenga las letras 'n' 'u' y 2 'l' como texto. A veces, puede desconocerse o no existir el dato correspondiente a algún campo de un registro. En estos casos decimos que el campo puede contener valores nulos.





UPDATE


Para editar un registro existente se usa la clausula UPDATE-SET-WHERE.

UPDATE nombre_tabla
SET nombre_columna = nuevo_valor, ...
WHERE nombre_columna = valor_existente;

Al hacer un UPDATE le indicamos el nombre de la tabla que vamos a modificar, le decimos que 'setee' en tal columna un nuevo valor, y para encontrar el registro que queremos modificar le damos una condicion con WHERE, generalmente suele ser el ID.

Pequeño ejemplo:

  UPDATE `dar10`.`usuarios`  
SET `mail`='dar10@comyr.com'  
WHERE `id`='52';





DELETE


Para borrar un registro se utiliza la declaración DELETE FROM-WHERE.
Su sintaxis es:

DELETE FROM nombre_tabla
WHERE nombre_columna = valor_existente;

Al igual que pasaba con UPDATE, para borrar necesitamos indicar desde donde vamos a eliminar un registro con DELETE FROM seguido del nombre de la table y una condicion con WHERE para que encuentre ese registro, generalmente también el ID.

Pequeño ejemplo:

 DELETE FROM `dar10`.`usuarios`
WHERE `id`='52';