miércoles, 7 de septiembre de 2016

Crud zk , JPA , Java con Mysql

En esta entrada proporcionaré un ejemplo básico de como realizar el registro, actualizar y eliminar datos desde una aplicación con BD Mysql.
Utilizamos:
  • ZK
  • Java
  • Myqsl
  • JPA

Partiremos suponiendo que ya tienen el entorno listo para elaborar el ejemplo.

Trabajaremos en una tabla con los siguientes campos

Nuestro ejemplo tendrá lista en la parte inferior donde se ira actualizando conforme se elimine, edite o agregue una nueva persona.






 
  
   

Ahora, la parte del controlador
package controlador;


import java.util.List;


import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;

import org.zkoss.zul.Textbox;

import datos.Dpersona;
import entidad.Persona;

public class PersonaControlador extends GenericForwardComposer{
private static final long serialVersionUID = 1L;
 
 //-----
 @Wire
 Textbox txt_IdPersona, txt_PrimerNombre, txt_Cedula, txt_Apellido, txt_Celular, txt_Email;
 Combobox cmb_Sexo;
 Button btn_Guardar, btn_Nuevo,btn_Editar,btn_Borrar;
 Listbox list_Persona;

 
 Persona datos = new Persona();
 
 public void doAfterCompose(Component comp) throws Exception {
  // TODO Auto-generated method stub
  
  super.doAfterCompose(comp);
  cargalist();
  refrescar_formulario();
 }
 
 public void refrescar_formulario(){
  txt_PrimerNombre.setValue("");
  txt_Apellido.setValue("");
  txt_Cedula.setValue("");
  txt_Celular.setValue("");
  txt_Email.setValue("");
  list_Persona.clearSelection();
  btn_Guardar.setDisabled(false);
  btn_Editar.setDisabled(true);
  btn_Borrar.setDisabled(true);
  cmb_Sexo.setValue("");
 }
 public void cargalist(){
  Dpersona per= new Dpersona();
  List lista=per.listapersonas();
  ListModelList listamodelo = new ListModelList(lista);
   list_Persona.setModel(listamodelo);
   list_Persona.renderAll();
 }
 
 public void onSelect$list_Persona(){
  Persona per=list_Persona.getSelectedItem().getValue();
  txt_IdPersona.setValue(Integer.toString(per.getIdPersona()));
  txt_PrimerNombre.setValue(per.getNombre());
  txt_Apellido.setValue(per.getApellido());
  txt_Cedula.setValue(per.getCedula());
  txt_Email.setValue(per.getEmail());
  txt_Celular.setValue(per.getCelular());
  cmb_Sexo.setValue(per.getSexo());
  btn_Guardar.setDisabled(true);
  btn_Editar.setDisabled(false);
  btn_Borrar.setDisabled(false);
 }
 public void onClick$btn_Nuevo(){
  cargalist();
  refrescar_formulario();
 }
 
 public void onClick$btn_Guardar(){
  try {
   String nombre=txt_PrimerNombre.getValue();
   String apellido= txt_Apellido.getValue();
   String cedula= txt_Cedula.getValue();
   String celular= txt_Celular.getValue();
   String email= txt_Email.getValue();
   String sexo= cmb_Sexo.getValue();
   if(nombre.isEmpty()||apellido.isEmpty()||cedula.isEmpty()||celular.isEmpty()||email.isEmpty()){
    alert("Todos los campos son obligatorios");
   }else{
    Persona per= new Persona();
    per.setNombre(nombre);
    per.setApellido(apellido);
    per.setCedula(cedula);
    per.setCelular(celular);
    per.setEmail(email);
    per.setSexo(sexo);
    per.setEstado("A");
    Dpersona.CrearPersona(per);
    alert("Persona creada correctamente...!");
    cargalist();
    refrescar_formulario();
   }
  } catch (Exception e) {
   alert("Error: " + e.getMessage());
  }
 }
 public void onClick$btn_Editar() {
  try {
 
  if (txt_PrimerNombre.getText().isEmpty() || txt_IdPersona.getText().isEmpty() || txt_Apellido.getText().isEmpty()
    || txt_Email.getText().isEmpty() || cmb_Sexo.getValue() == "" || txt_Cedula.getText().isEmpty()) {
   alert("Todos los campos con (*) son obligatorios");

  } else {

   Dpersona mper = new Dpersona();
   Persona per = new Persona();

   per.setIdPersona(Integer.parseInt(txt_IdPersona.getText()));
   per.setNombre(txt_PrimerNombre.getText().toUpperCase());
   per.setApellido(txt_Apellido.getText().toUpperCase());
   per.setCedula(txt_Cedula.getText());
   per.setCelular(txt_Celular.getText());
   per.setEmail(txt_Email.getText());
   per.setSexo(cmb_Sexo.getValue());
   per.setEstado("A");

   mper.Editarpersona(per);
   alert("Datos actualizados con exito");
   cargalist();
   refrescar_formulario();
   
   }
   } catch (Exception e) {// TODO Auto-generated catch block
    alert(e.getMessage());
   }
  
 }

 public void onClick$btn_Borrar() {
  try {
   Dpersona mper = new Dpersona();
   Persona per = new Persona();
   per.setIdPersona(Integer.parseInt(txt_IdPersona.getText()));
   per.setEstado("E");
   mper.Eliminarpersona(per);
   alert("Datos eliminados con exito");
   cargalist();
   refrescar_formulario();
   } catch (Exception e) {
      // TODO Auto-generated catch block
    alert(e.getMessage());
   }
  }

}

La capa de datos
package datos;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;


import entidad.Persona;
public class Dpersona {
 
 public static void CrearPersona(Persona per) throws Exception{
   EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
     EntityManager entitymanager = emf.createEntityManager( );
     try{
      entitymanager.getTransaction().begin();
      entitymanager.persist(per);
      entitymanager.getTransaction().commit();
     } catch (Exception e) {
      entitymanager.getTransaction().rollback();
      throw new Exception("Error al registrar la Persona..!");

     }finally {
      entitymanager.close();
      emf.close();
     }
  
 }
 public void Editarpersona(Persona per) throws Exception {
 Persona per_aux = new Persona();
 EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
    EntityManager entitymanager = emf.createEntityManager( );
  try {
   entitymanager.getTransaction().begin();
   per_aux = entitymanager.find(Persona.class, per.getIdPersona());
   entitymanager.flush();
   per_aux.setNombre(per.getNombre());
   per_aux.setApellido(per.getApellido());
   per_aux.setCedula(per.getCedula());
   per_aux.setCelular(per.getCelular());
   per_aux.setEmail(per.getEmail());
   per_aux.setSexo(per.getSexo());
   per_aux.setEstado(per.getEstado());
   entitymanager.merge(per_aux);
   entitymanager.getTransaction().commit();

  } catch (Exception e) {
   // TODO: handle exception
   //e.printStackTrace();
   entitymanager.getTransaction().rollback();
      throw new Exception("Error al actualizar..!");
  } finally {
   entitymanager.close();
   emf.close();
  }
 }

 public void Eliminarpersona(Persona per) throws Exception {
  Persona per_aux = new Persona();
  EntityManagerFactory emf = Persistence.createEntityManagerFactory("srlab");
     EntityManager entitymanager = emf.createEntityManager( );
  try {
   entitymanager.getTransaction().begin();
   per_aux =entitymanager.find(Persona.class, per.getIdPersona());
   entitymanager.flush();
   per_aux.setIdPersona(per.getIdPersona());
   per_aux.setEstado(per.getEstado());
   entitymanager.merge(per_aux);//si quieres eliminar  aplica remove
   entitymanager.getTransaction().commit();
  } catch (Exception e) {
      throw new Exception("Error al eliminar..!");
  } finally {
   entitymanager.close();
   emf.close();
  }
 }
 @SuppressWarnings({ "unchecked", "finally" })
 public List listapersonas(){
   EntityManagerFactory emf=Persistence.createEntityManagerFactory("srlab");
   EntityManager entitymanager = emf.createEntityManager();
   List lista = null;
   try {
    entitymanager.getTransaction().begin();
    Query query = entitymanager.createNamedQuery("Persona.findAll",Persona.class);
    lista = query.getResultList();
   
   entitymanager.getTransaction().commit();
   } catch (Exception e) {
   // TODO: handle exception
    //e.printStackTrace(); 
   entitymanager.getTransaction().rollback();
   throw new Exception("no pode vose");
  
  }finally {
   entitymanager.close();
   emf.close();
   return lista;
   }
 
 }

}

La entidad que tendrán que generarla con JPA, pero bueno igual se las dejo =)
package entidad;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the persona database table.
 * 
 */
@Entity
@NamedQuery(name="Persona.findAll", query="SELECT p FROM Persona p where p.estado ='A'")
public class Persona implements Serializable {
 private static final long serialVersionUID = 1L;

 @Id
 @Column(name="id_persona")
 private int idPersona;

 private String apellido;

 private String cedula;

 private String celular;

 private String email;

 private String estado;

 private String nombre;

 private String sexo;

 public Persona() {
 }

 public int getIdPersona() {
  return this.idPersona;
 }

 public void setIdPersona(int idPersona) {
  this.idPersona = idPersona;
 }

 public String getApellido() {
  return this.apellido;
 }

 public void setApellido(String apellido) {
  this.apellido = apellido;
 }

 public String getCedula() {
  return this.cedula;
 }

 public void setCedula(String cedula) {
  this.cedula = cedula;
 }

 public String getCelular() {
  return this.celular;
 }

 public void setCelular(String celular) {
  this.celular = celular;
 }

 public String getEmail() {
  return this.email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 public String getEstado() {
  return this.estado;
 }

 public void setEstado(String estado) {
  this.estado = estado;
 }

 public String getNombre() {
  return this.nombre;
 }

 public void setNombre(String nombre) {
  this.nombre = nombre;
 }

 public String getSexo() {
  return this.sexo;
 }

 public void setSexo(String sexo) {
  this.sexo = sexo;
 }

}
 
Igual aqui les dejo el archivo del projecto para que lo puedan descargar y una pagina donde podrán aprender más sobre JPA.
Archivo: Srlab
Pagina: JPA

Dudas o preguntas, comenten =) 

Leer, escribir y vaciar archivo de texto Vb.net


Vamos a usar un ejemplo con 3 cajas de texto. Simulando un número de factura, que al dar click en aumentar se incrementará en 1 el  número de la tercer caja de texto.




 
Hay funciones para verificar si la carpeta y archivo de texto existen, para crearlos en caso de que no, para borrar el contenido del archivo y volver a escribir, cabe recalcar que se trabajará con la primer linea del archivo.
Dudas o preguntas, comenten =) 

A continuación, el código.


 Private Sub btn_guardar_Click(sender As Object, e As EventArgs) Handles btn_guardar.Click
        If (Me.txt_serie1.Text = "" Or Me.txt_serie2.Text = "" Or Me.txt_numero_serie.Text = "") Then
            MsgBox("Faltan algunos campos")
        Else
            If verifica_existe_carpeta() Then
                If verifica_existe_archivo() Then
                    '   MsgBox("Archivo existe")
                    borra_info_fac()
                    escribir_numero_de_factura(Me.txt_serie1.Text, Me.txt_serie2.Text, Me.txt_numero_serie.Text)
                Else
                    '   MsgBox("Archivo no existe")
                    crear_archivo()
                    escribir_numero_de_factura(Me.txt_serie1.Text, Me.txt_serie2.Text, Me.txt_numero_serie.Text)
                End If
            Else
                ' MsgBox("Carpeta no existe")
                crear_carpeta()
                crear_archivo()
                escribir_numero_de_factura(Me.txt_serie1.Text, Me.txt_serie2.Text, Me.txt_numero_serie.Text)
            End If
            cargar_numero_fac()
        End If
    End Sub
    Private Function verifica_existe_carpeta() As Boolean 'verifica si existe el archivo
        Dim resp As Boolean = False
        Dim ruta As String = "C:\iconos"
        If Directory.Exists(ruta) = True Then
            resp = True
        End If
        Return resp
    End Function
    Private Function verifica_existe_archivo() As Boolean 'verifica si existe el archivo
        Dim resp As Boolean = False
        Dim ruta As String = "C:\iconos\num_serie.txt"
        If File.Exists(ruta) = True Then
            resp = True
        End If
        Return resp
    End Function
    Private Sub cargar_numero_fac() 'carga el numero de la factura
        If verifica_existe_carpeta() And verifica_existe_archivo() Then
            Dim objStreamReader As StreamReader
            Dim strLine As String
            objStreamReader = New StreamReader("C:\iconos\num_serie.txt")
            'extraemos la primer linea de texto
            strLine = objStreamReader.ReadLine
            objStreamReader.Close()
            If strLine = "" Then
                Me.txt_serie1.Text = "000"
                Me.txt_serie2.Text = "000"
                Me.txt_numero_serie.Text = "000000000"
            Else
                Dim Arreglo As String() = strLine.Split("-")
                Me.txt_serie1.Text = Arreglo(0)
                Me.txt_serie2.Text = Arreglo(1)
                Me.txt_numero_serie.Text = Arreglo(2)
            End If
        Else
            ' MsgBox("Carpeta y/o archivo no existe")
            Me.txt_serie1.Text = "000"
            Me.txt_serie2.Text = "000"
            Me.txt_numero_serie.Text = "000000000"
        End If
    End Sub
    Private Sub crear_carpeta()
        Dim ruta As String = "C:\"
        My.Computer.FileSystem.CreateDirectory(ruta & "\iconos")
    End Sub
    Private Sub crear_archivo()
        Dim ruta As String = "C:\iconos\num_serie.txt"
        Dim fi As FileInfo = New FileInfo(ruta)
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cargar_numero_fac()
    End Sub
    Private Sub escribir_numero_de_factura(ByVal serie1 As String, ByVal serie2 As String, ByVal num_serie As String)
        Dim ruta As String = "C:\iconos\num_serie.txt"
        Dim sw As StreamWriter
           sw = File.CreateText(ruta)
        sw.WriteLine(serie1 & "-" & serie2 & "-" & num_serie)
        sw.Flush()
        sw.Close()
    End Sub
    Private Sub borra_info_fac()
        Using file As New IO.StreamWriter("C:\iconos\num_serie.txt")
            file.Flush()
        End Using
    End Sub
    Private Sub incrementa_num_fac()
        ' extraemos contenido
        Dim objStreamReader As StreamReader
        Dim strLine As String
        objStreamReader = New StreamReader("C:\iconos\num_serie.txt")
        'Leemos la primer linea de texto
        strLine = objStreamReader.ReadLine
        'cerramos el archivo.
        objStreamReader.Close()
        Dim Arreglo As String() = strLine.Split("-")' separamos la cadena 
        Dim s1 As String = Arreglo(0)
        Dim s2 As String = Arreglo(1)
        Dim s3 As String = CStr(CInt(Arreglo(2)) + 1)'sumamos en 1
        '-------------borramos contenido
        borra_info_fac()
        '---------------actualiza
        escribir_numero_de_factura(s1, s2, s3)
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        incrementa_num_fac()
        cargar_numero_fac()
    End Sub


sábado, 13 de agosto de 2016

Crear informe vb.net conexion nativa Mysql

Bueno en esta ocasion utilizaré una tabla con la que estoy trabajando actualmente =)
 
Ahora crearemos un dataset y dentro de este crearemos una tabla 


Sencillo verdad? en este caso lo cree con solo 3 campos pues en la seleccion que hare en visual solo traere los 3 campos, agrupandolos por descripcion y contando, para saber el numero de pacientes por consulta. 
Ahora deben crear un informe .rdlc  y en "Datos de Informe" deben agragar el dataset y escoger la tabla que creamos anteriormente.


 Bueno luego de eso solo debes arrastrar de Dataset1 en Conjunto de datos o crear una tabla dependiendo de como quieran presentar sus datos
 Me ha quedado de esta manera y tambien agregue unos parametros que voy a enviar desde mi formulario =)


Luego crearemos un nuevo formulario donde se visualizara nuestro informe
 


 Agregan un Reportviewer y eligen el rdlc que creamos en el paso anterior.
 
Ahora desde mi formulario enviare 4 parametros, los de las 3 cajas de texto de abajoo y la fecha actual


A continuacion el codigo del boton Imprimir
 Private Sub btn_imprimir_Click(sender As Object, e As EventArgs) Handles btn_imprimir.Click
        Dim fecha_reporte, tot_reg, tot_ate, tot_din As String
        fecha_reporte = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")
        tot_reg = Me.txt_num_reg.Text
        tot_ate = Me.txt_total_atendidos.Text
        tot_din = Me.txt_dinero_atendidos.Text

        Dim fecha_desde, fecha_hasta As String
        fecha_desde = Me.dt_fecha_desde.Value.ToString("yyyy-MM-dd")
        fecha_hasta = Me.dt_fecha_hasta.Value.ToString("yyyy-MM-dd")

        Dim querycab As String
        conexion_global()
        querycab = "select  Descripcion,count(*) numero, sum(total) total from det_fac_con where Dia_Turno>='" & fecha_desde & "' and Dia_Turno<'" & fecha_hasta & "' Group by Descripcion"
        da = ejecuta_consulta_DataAdapter(querycab)
        Dim table As New DS_general_estadisticas.tabla_general_estDataTable
        da.Fill(table)

        ver_pacientes_atendidos.DS_general_estadisticas.tabla_general_est.Merge(table)
        'Parametros 

        Dim parameters As ReportParameter() = New ReportParameter(3) {}
        parameters(0) = New ReportParameter("fecha_reporte", fecha_reporte)
        parameters(1) = New ReportParameter("num_reg", tot_reg)
        parameters(2) = New ReportParameter("tot_ate", tot_ate)
        parameters(3) = New ReportParameter("tot_din", tot_din)


        ver_pacientes_atendidos.ReportViewer1.LocalReport.SetParameters(parameters)
        ver_pacientes_atendidos.ReportViewer1.RefreshReport()

        ver_pacientes_atendidos.ShowDialog()
        cerrar()
    End Sub
Ahora el codigo en el Modulo "Conexion" =)

Imports MySql.Data
Imports MySql.Data.Types
Imports MySql.Data.MySqlClient

Module Conexion
    Public _cadena As String
    Public _conexion As MySqlConnection
    Public cmd As MySqlCommand
    Public da As New MySqlDataAdapter
    Public ultimo_id As Integer
    Public Function conexion_global() As Boolean
        Dim _estado As Boolean = True
        Try
            _cadena = ("server=localhost; database=primeroagosto; user id=root; password=")
            _conexion = New MySqlConnection(_cadena)
            _conexion.Open()

        Catch ex As Exception
            MessageBox.Show(ex.Message)
            _estado = False
        End Try
        Return _estado
    End Function
    Public Sub cerrar()
        _conexion.Close()
    End Sub
End Module

domingo, 7 de agosto de 2016

Código para enviar correo con Java

Antes de implementar el código de abajo tienen que generar una contraseña de aplicación de una cuenta de google

import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 

 
public class correo {
 static String remitente = "correo@gmail.com";
 static String claveCorreo = "";
 static Properties mailServerProperties;
 static Session getMailSession;
 static MimeMessage generateMailMessage;
 
 public static void main(String args[]) throws AddressException, MessagingException {
  enviarcorreo();
  
 }
 
 public static void enviarcorreo() throws AddressException, MessagingException {
 
  mailServerProperties = System.getProperties();
  mailServerProperties.put("mail.smtp.host", "smtp.gmail.com");
  mailServerProperties.put("mail.smtp.port", "587");
  mailServerProperties.put("mail.smtp.auth", "true");
  mailServerProperties.put("mail.smtp.starttls.enable", "true");


  getMailSession = Session.getDefaultInstance(mailServerProperties, null);
  generateMailMessage = new MimeMessage(getMailSession);
  generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress("destinatario1"));
  generateMailMessage.addRecipient(Message.RecipientType.CC, new InternetAddress("destinatario2"));
  generateMailMessage.setSubject("PRUEBAAA...!");
  String mensaje= "Correo de prueba. " + "Oh";
  generateMailMessage.setContent(mensaje, "text/html");
  
  Transport transport = getMailSession.getTransport("smtp");
 
  transport.connect("smtp.gmail.com",remitente,claveCorreo);
  transport.sendMessage(generateMailMessage, generateMailMessage.getAllRecipients());
  transport.close();
 }
}

viernes, 6 de junio de 2014

Error al instalar Wampserver "msvcr100.dll"


Bueno dicho error se debe a que primero debemos instalar unos cosillas para que el wamp funcione correctamente =)..si no se quedara en el estado anaranjado x_X
Aquí esta el link --> Visual C++ 2012.
instalen y vuelvan a instalar el wamp..y listo =) a mi me funciono =D xD

jueves, 19 de septiembre de 2013

Recuperar equipo con Prey

Bueno como esta semana a sido de descanso ..((despues de examenes xD)) me puse a mirar unas paginas para ver si encontraba algo que me llamara la atención y lo encontré en la pagina de Dragonjar.
Y lo que hice en ese momento fue probarla xD pa ver si era cierto jeje...y pSs si me parecio  una herramienta muy util si en algun caso sufrimos el robo de uno de nuestra computadora.

La Herramienta se la tienen que descargar de la pagina de PREY la cual tienen instalarla en el equipo a asegurar, se registran y toda la cosa y listo.
El funcionamiento de la herramienta es el siguiente:
Como ya estan registrado y el equipo tambien, van a la pagina y acceden con sus datos y podran ver los dispositivos vinculados a la cuenta.
Para la herramienta entre en funcionamiento es necesario poner en estado missing al dispositivo y nos pedirá el intervalo en que deseamos recibir los reportes. Ponemos en guardar cambios y recibimos un correo en el cual lamentan la perdida de nuestro equipo y que estemos atentos que en los proximos minutos recibiremos un reporte.


Y listo.. recibimos un correo  el cual nos indica que llego un reporte...vamos al panel de prey ingresamos al dispositivo registrado y vamos hasta reportes y bueno nos llega la direccion de donde esta nuestro equipo, tambien recibimos una captura de pantalla y una foto tomada de la web cam. con un poco de suerte podremos capturar el rostro del delincuente :D y meterlo preso xD jeje bueno eso es todo :) espero les sirva de mucho ....bendiciones..!!=)

Nota: Es obvio que no recibirán un reporte hasta que el delincuente se conecte a Internet y si la formatearon psSs recontra chanfle ya nada se puede hacer jeje pero esperemos que si le llegan a sustraer su equipo los delincuentes no sean tan sabidos jeje.