domingo, 22 de noviembre de 2015

[Mysql] Configurar acceso remoto a root





Mysql se ha convertido en uno de los servidores que regularmente tendemos a utilizar por primera vez en el ambito estudiantil y porque no en el ambito profesional tambien, por su flexibilidad, por su facilidad de implementación y por las diversas opciones que tenemos en el mercado para la parte web regularmente te ofrecen, en este caso muchas veces necesitamos acceder de forma remota o simplemente con un gestor que sea mas comodo en mi caso con Workbench que para mi uso es perfecto, muchas veces mi servidor no esta en la misma maquina que estoy utilizando por lo que requiero conectar remotamente, por configuración predeterminada Mysql no tiene un usuario para ingresar de modo remoto por lo que tenemos que nosotros darle el permiso.

  1. Primero accedemos a nuestro servidor en mi caso de esta manera (en este caso se ejecutaran los comandos directamente en donde esta instalado el servidor) 

  2. Nos pedira la contraseña y accederemos a la consola de Mysql


  3. Una vez estando ahí daremos los siguientes comandos para dar permisos tomando en cuenta que el "%", es un wildcard de los nodos que permitira la conexión remota por lo que si ponemos 192.168.1.% significa que todos los nodos que pertenecen a la red 192.168.1.0 podran acceder.  
    
    mysql> GRANT ALL ON *.* to root@'%' IDENTIFIED BY ‘contraseña_de_acceso_remoto‘;
    mysql> FLUSH PRIVILEGES;
    
    


Con esto ya se podra acceder desde cualquier otra maquina utilizando el usuario root, si quieres proveer de dicho servicios a otros usuarios tendrías que repetir procedimiento en el workbench en la opción de usuarios

domingo, 8 de noviembre de 2015

[MySQL] Recorrer el resultado de un select dentro de un procedmiento almacenado o función





Muchas veces hay tareas en las que necesitas hacer consultas cruzadas, que muchas veces complican demasiado el codigo y pueden generar problemas a la hora de la ejecución, ademas que la depuración es mas complicada dentro tus funciones o procedimientos, por lo que en lo particular me gusta que muchas de las tareas las haga el motor de base de datos, asi generando una sola transacción remota, les comento un ejemplo: 

1) Tengo un procedimiento almacenado que libera los productos de un proceso en tienda, y estoy generando, este procedimiento recibe un texto, el cual el procedimiento parte y realiza las actividades. Lo llamaremos: stp_devuelve_producto(idusuario, productos)

2) Ahora quiero devolver todos los productos en un dia particular, por lo que necesitaria hacer una consulta del día, luego posteriormente de los datos recibidos, ejecutar las sentencias para devolver el producto, por lo que lo hare en el mismo procedimiento almacenado que llamaremos stp_cancel_day(dia, idusuario), usaremos CURSOR de mysql 


CREATE DEFINER=`root`@`localhost` PROCEDURE `stp_cancel_day`(pday datetime, pidusuario int)
BEGIN  
   -- Declaramos las variables necesarias 
   -- La primera para saber cuando se detendra la consulta
   DECLARE done INT DEFAULT FALSE;
   -- Esta variable son las que recibiran los elementos necesarios 
   DECLARE piddetalle int DEFAULT 0;
   -- La variable que declararemos para concatenar los resultados
   DECLARE cad text; 
   
   -- Recorre se llma la variable CURSOR que recorre en base a la consulta
   DECLARE recorre CURSOR FOR 
      SELECT idproducto FROM detalle_pedido WHERE day=pday AND estado='ABIERTO';     
   -- Se declara un manejador para saber cuando se tiene que detener 
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
   -- Se abre el cursor
   OPEN recorre; 
   SET cad = "";
   loop_recorre: LOOP   
       FETCH recorre INTO piddetalle,pidproducto;        
       -- Fetch lo utilizamos para leer cada uno de los registros
       -- If que permite salir del ciclo
       IF done THEN 
   LEAVE loop_recorre;
    END IF;
       -- Concatemos los datos 
       SET cad = CONCAT(cad,CAST(pidproducto AS CHAR),',',CAST(piddetalle AS CHAR),',');       
   END LOOP;
   -- cerramos el cursor 
   CLOSE recorre;    
   -- Devuelve productos
   call stp_devuelve_producto(pidusuario,cad);
  
END



Con esto podremos recorrer cualquier tabla y utilizar sus datos  espero sirva


viernes, 6 de noviembre de 2015

[JAVA] Cuenta vocales utilizando Map


Un pequeño ejercicio para contar vocales a través de una cadena


import java.util.HashMap;
import java.util.Scanner;


public class Cadena {
    
    public static void main(String[] args) {
          Scanner sc = new Scanner(System.in); 
          String cad = sc.nextLine(); 
          char[] car = {'a','e','i','o','u'};
          cad = cad.toLowerCase(); 
          HashMap< Character, Integer> cuenta = new HashMap <>();
          for(char c: car)
             cuenta.put(c, 0);
          for(int i=0;i< cad.length();i++)         
              if(cuenta.containsKey(cad.charAt(i)))
              {
                  int ii = cuenta.get(cad.charAt(i));
                  ii++; 
                  cuenta.replace(cad.charAt(i), ii);
              }
          for(char c: car)
          {
              int cantdad = cuenta.get(c); 
              if(cantdad>0)
                  System.out.println(c+"->"+cantdad);
          }
          
    }  
}