lunes, 26 de febrero de 2018

Crear códigos QR con Java

Vamos hacer un pequeño sistema que nos permite generar códigos QR. Lo vamos a desarrollar con Java y NetBeans. Lo primero que vamos hacer es descargar la librería zxing-core-2.0.jar

Ahora vamos a crear un nuevo proyecto llamado QRTest para iniciar a escribir nuestro código. Cuando tenemos el proyecto listo lo que tenemos que hacer es agregar la librería zxing-core-2.0.jar para poder generar los códigos QR.

Ahora debemos importar las siguientes librerías en la clase donde vamos a generar nuestros códigos QR.


import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

Vamos a dar un vistazo al código.

public static void main(String[] args) {
        try {
            String content = "http://www.google.com";
            String filePath = "";
            String fileType = "png";
            int size = 125;
            UUID uuid = UUID.randomUUID();
            String randomUUIDString = uuid.toString();
            QRCodeWriter qrcode = new QRCodeWriter();
            BitMatrix matrix = qrcode.encode(content, BarcodeFormat.QR_CODE, size, size);
            File qrFile = new File(filePath + randomUUIDString + "." + fileType);
            int matrixWidth = matrix.getWidth();
            BufferedImage image = new BufferedImage(matrixWidth, matrixWidth, BufferedImage.TYPE_INT_RGB);
            image.createGraphics();
            
            Graphics2D graphics = (Graphics2D) image.getGraphics();
            graphics.setColor(Color.WHITE);
            graphics.fillRect(0, 0, matrixWidth, matrixWidth);
            graphics.setColor(Color.BLACK);
            
            for (int b = 0; b < matrixWidth; b++) {
                for (int j = 0; j < matrixWidth; j++) {
                    if (matrix.get(b, j)) {
                        graphics.fillRect(b, j, 1, 1);
                    }
                }
            }
            ImageIO.write(image, fileType, qrFile);
        } catch (WriterException ex) {
            Logger.getLogger(QRTest.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(QRTest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Primero vamos a tener la content la cual será el contenido de la imagen de nuestro código QR. Luego la variable filePath donde vamos a guardar la imagen, en este momento no le vamos a dar ninguna dirección para guardarla donde se ejecute nuestro sistema. La variable fileType es el formato de nuestra variable y en nuestro caso la vamos almacenar de tipo png. La que sigue es size con la que vamos a definir el tamaño de la imagen.

Ahora vamos a crear la variable uuid con la que vamos a crear el nombre de la imagen que será un texto generado para que cada una tenga un nombre distinto.

Debemos crear una variable de tipo BitMatrix que va a representar nuestra imagen en bits hasta que sea almacenada. El nombre de la variable es matrix. Esta variable requiere de un objeto que vamos a generar a partir de un objeto QRCodeWriter que nos va permitir crear nuestro código QR.

Ahora vamos a ver la variable image que es un BufferedImage donde vamos a contener nuestra imagen en memoria para que después la podamos escribir en disco duro.

Usando un objeto de tipo Graphics2D vamos a poder generar la imagen como tal para poder ser escrita en disco duro. Le damos un tamaño, un fondo, etc y ya la imagen esta lista para ser escrita.

Finalmente usando la clase ImageIO vamos a escribir la imagen. La imagen esta contenida en el objeto image, el tipo de imagen esta en la variable fileType y la dirección está en la variable qrFile.

 El resultado la imagen que deseamos generar con nuestro contenido. 



¿Quieres aprender java y C#?

Etiquetas:

miércoles, 21 de febrero de 2018

Buscando duplicados con SQLServer

Hay una manera muy simple para poder buscar duplicados en las tablas de SQLServer. Vamos a trabajar con la función ROW_NUMBER el cual va a ser un valor calculado cuando se ejecuta el query.

Primero vamos a crear una tabla muy simple

CREATE TABLE person(id int identity primary key,
name nvarchar(200) not null,
lastName nvarchar(200) not null,
email nvarchar(200) not null)

Con esa simple tabla vamos a ingresar algunos datos y luego a crear nuestro resultado para ver si existen duplicados.

Vamos a insertar los siguientes datos

INSERT INTO person(name, lastName, email) values('Oscar',' Arias','Oscar. Arias@example.com');

INSERT INTO person(name, lastName, email) values('Cleto','González','Cleto.González@example.com');

INSERT INTO person(name, lastName, email) values('Ricardo','Jiménez','Ricardo.Jiménez@example.com');

INSERT INTO person(name, lastName, email) values('Jesús','Jiménez','Jesús.Jiménez@example.com');

INSERT INTO person(name, lastName, email) values('Juan','Mora','Juan.Mora@example.com');

INSERT INTO person(name, lastName, email) values('José Rafael','De Gallegos','José Rafael.De Gallegos@example.com');

INSERT INTO person(name, lastName, email) values('Bernardo','Soto','Bernardo.Soto@example.com');

INSERT INTO person(name, lastName, email) values('José María','Montealegre','José María.Montealegre@example.com');

INSERT INTO person(name, lastName, email) values('José Joaquín','Trejos','José Joaquín.Trejos@example.com');

INSERT INTO person(name, lastName, email) values('José María','Figueres','José María.Figueres@example.com');

INSERT INTO person(name, lastName, email) values('Rodrigo','Carazo','Rodrigo.Carazo@example.com');

INSERT INTO person(name, lastName, email) values('Luis Alberto','Monge','Luis Alberto.Monge@example.com');

INSERT INTO person(name, lastName, email) values('Mario ','Echandi','Mario .Echandi@example.com');

INSERT INTO person(name, lastName, email) values('Otilio','Ulate','Otilio.Ulate@example.com');

INSERT INTO person(name, lastName, email) values('Teodoro','Picado','Teodoro.Picado@example.com');

INSERT INTO person(name, lastName, email) values('Rafael Ángel','Calderón','Rafael Ángel.Calderón@example.com');

INSERT INTO person(name, lastName, email) values('León','Cortés','León.Cortés@example.com');

INSERT INTO person(name, lastName, email) values('Julio','Acosta','Julio.Acosta@example.com');

INSERT INTO person(name, lastName, email) values('Braulio','Carrillo','Braulio.Carrillo@example.com');

INSERT INTO person(name, lastName, email) values('Manuel','Aguilar','Manuel.Aguilar@example.com');

INSERT INTO person(name, lastName, email) values('Francisco','Morazán','Francisco.Morazán@example.com');

INSERT INTO person(name, lastName, email) values('Francisco María','Oreamuno','Francisco María.Oreamuno@example.com');

INSERT INTO person(name, lastName, email) values('Daniel','Oduber','Daniel.Oduber@example.com');

INSERT INTO person(name, lastName, email) values('Juan Rafael','Mora','Juan Rafael.Mora@example.com');

INSERT INTO person(name, lastName, email) values('Bruno','Carranza','Bruno.Carranza@example.com');

INSERT INTO person(name, lastName, email) values('Tomás','Guardia','Tomás.Guardia@example.com');

INSERT INTO person(name, lastName, email) values('Aniceto','Esquivel','Aniceto.Esquivel@example.com');

INSERT INTO person(name, lastName, email) values('Vicente','Herrera','Vicente.Herrera@example.com');

INSERT INTO person(name, lastName, email) values('Próspero','Fernández','Próspero.Fernández@example.com');

INSERT INTO person(name, lastName, email) values('Carlos','Durán','Carlos.Durán@example.com');

INSERT INTO person(name, lastName, email) values('Rafael','Yglesias','Rafael.Yglesias@example.com');

INSERT INTO person(name, lastName, email) values('Ascensión','Esquivel','Ascensión.Esquivel@example.com');

INSERT INTO person(name, lastName, email) values('Alfredo','González','Alfredo.González@example.com');

INSERT INTO person(name, lastName, email) values('Federico','Tinoco','Federico.Tinoco@example.com');

INSERT INTO person(name, lastName, email) values('José','Figueres','José.Figueres@example.com');

Ahora vamos crear algunos queries para buscar los duplicados.

Para poder buscar duplicados vamos a utilizar la función partition que nos permite particionar los datos por las columnas que requerimos. Por ejemplo, si queremos ver si tenemos duplicados por nombre podemos hacer el siguiente query

select * from (
select row_number() over(partition by name order by name asc) as rowId, id, name,lastName, email  from person
) temp where rowId >1



Como vemos en el resultado tenemos un duplicado por el nombre José María. En este caso como queríamos buscar si hay nombres duplicados creamos la partición por el nombre y con esto se va generar el numero del row_number cualquier row que sea mayor a 1 quiere decir que es un duplicado de los datos.

select * from (
select row_number() over(partition by lastName order by name asc) as rowId, id, name,lastName, email  from person
) temp where rowId >1


Con este otro ejemplo estamos buscando duplicados usando el apellido. Si existen apellidos duplicados vamos a poder obtenerlos.

Como vemos tenemos 5 duplicados.

select * from (
select row_number() over(partition by lastName, name order by name asc) as rowId, id, name,lastName, email  from person
) temp where rowId >1



Ahora con este ultimo query vamos a buscar duplicados con el nombre y el apellido. Si ejecutamos el query nos damos cuanta que no hay duplicados con la combinación de nombre y apellidos. 

Etiquetas: