martes, 29 de noviembre de 2016

Java Fundamentos 08: JDBC (Parte 4)

Aplicación a Descargar


https://drive.google.com/open?id=0B7Ct7K_LTJvSUXBaNG0wWXBNNGM





  1. Agregar la librería de SQLJDBC.jar
  2. Cambiar en la Clase Constantes.java por los valores correspondientes a su computadora
  3. Agregar el código para las Consultas
  4. Agregar código al método ValidaIngreso() para que retorne true si los datos de las casillas tienen valores aceptables, Nombre e Iniciales diferentes de vacío y CodNivelEducativo tiene un valor numérico.
  5. Agregar el código para realizar UPDATE sobre una fila, usando la condición del CodGrado = al valor de la casilla
  6. Agregar el código para realizar DELETE sobre una fila, usando la condición del CodGrado = al valor de la casilla

Código Fuente:





Script para Agregar dos Filas Adicionales a la tabla NivelEducativo



Para otorgar permisos al USER Profesor1 sobre la escritura de las tablas:


USE SistemaNotas;
GO

ALTER ROLE db_datawriter
     ADD MEMBER Profesor1;





Ejemplo de Diálogo de Advertencia:

@FXML
private void btnEliminarClick(ActionEvent event) {
   Alert Dialogo = new Alert(AlertType.CONFIRMATION, "Seguro Borrar?", 
                ButtonType.YES, ButtonType.NO);

   Optional<ButtonType> Respuesta = Dialogo.showAndWait();
   
    if (Respuesta.isPresent() && Respuesta.get() == ButtonType.YES) {
           //Invocar al método para DeleteGrado();
           
    }

}









lunes, 28 de noviembre de 2016

Java Fundamentos 08: JDBC (Referencias)

Usar tipos de datos básicos
https://msdn.microsoft.com/es-es/library/ms378878(v=sql.110).aspx


Usar instrucciones con el controlador JDBC
https://msdn.microsoft.com/es-es/library/ms378623(v=sql.110).aspx


Usar una instrucción SQL sin parámetros
https://msdn.microsoft.com/es-es/library/ms378451(v=sql.110).aspx


Usar una instrucción SQL con parámetros
https://msdn.microsoft.com/es-es/library/ms378138(v=sql.110).aspx


Usar instrucciones con procedimientos almacenados
https://msdn.microsoft.com/es-es/library/ms378046(v=sql.110).aspx


Administrar conjuntos de resultados con el controlador JDBC
https://msdn.microsoft.com/es-es/library/ms378737(v=sql.110).aspx


Referencia de la API del controlador JDBC
https://msdn.microsoft.com/es-es/library/ms378914(v=sql.110).aspx


Usar múltiples conjuntos de resultados
https://msdn.microsoft.com/es-ES/library/ms378758(v=sql.110).aspx


Using Prepared Statements

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

Java Fundamentos Referencias

Class Formatter

https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html


Formatting Numeric Print Output

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html


Class TableView<S>

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TableView.html#itemsProperty


Class TableColumn<S,T>

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TableColumn.html


Class PropertyValueFactory<S,T>

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/cell/PropertyValueFactory.html


Table View

http://docs.oracle.com/javafx/2/ui_controls/table-view.htm




Multiple FXML with Controllers, share object

http://stackoverflow.com/questions/12166786/multiple-fxml-with-controllers-share-object




Using JavaFX Properties and Binding

http://docs.oracle.com/javase/8/javafx/properties-binding-tutorial/binding.htm#JFXBD107


Using JavaFX Collections

http://docs.oracle.com/javase/8/javafx/collections-tutorial/collections.htm#JFXCL107


Best Practice: Enforce Model-View-Controller (MVC) with FXML

http://docs.oracle.com/javafx/2/best_practices/jfxpub-best_practices.htm



javafx.scene.control
Class Alert

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Alert.html



Java Fundamentos 08: JDBC (Parte 3)

Presentación


https://drive.google.com/open?id=0B7Ct7K_LTJvSWUlnamF3aHEydUk


Script para Insertar filas en la tabla Grados


https://drive.google.com/open?id=0B7Ct7K_LTJvSUFliakZ0QnZKMlk


Aplicación de Notas


https://drive.google.com/open?id=0B7Ct7K_LTJvSYTFpRi1mN2VIeDQ


Recordar corregir:

  • La clase Constantes.java
  • Eliminar la Referencia a SQLJDBC42.jar y volver a agregarlo


Código Fuente


https://drive.google.com/open?id=0B7Ct7K_LTJvSVXBpUk9QNWwtVGs




viernes, 25 de noviembre de 2016

Java Fundamentos 08: JDBC (Parte 2)


Base de Datos:

https://drive.google.com/open?id=0B7Ct7K_LTJvSV01vQlZHS0VaLUE



Cambiar Autorización:

USE SistemaNotas;
GO
ALTER AUTHORIZATION ON DATABASE::SistemaNotas TO sa;


Asignar el Login

USE SistemaNotas;
GO
ALTER USER Profesor1 WITH LOGIN = Profesor1;



Aplicación de Notas:

https://drive.google.com/open?id=0B7Ct7K_LTJvSOVVQY3RfdUkwRzQ



Código Fuente:

https://drive.google.com/open?id=0B7Ct7K_LTJvSODU0VzlYM3VzRnM
















martes, 22 de noviembre de 2016

Java Fundamentos 07: Colecciones y Clases

Presentación:

https://drive.google.com/open?id=0B7Ct7K_LTJvSUlduRFM0X3g3Nnc




Laboratorio:



https://drive.google.com/open?id=0B7Ct7K_LTJvSVVFwZmdLa1c5cFk



Botón de Ordenar

Para agregar la capacidad de ordenar a las clases propias, se implementa la interface Comparable:



Y luego se escribe el método de compareTo, dentro de la clase:







viernes, 18 de noviembre de 2016

Java Fundamentos 06: Colecciones

Presentación:


https://drive.google.com/open?id=0B7Ct7K_LTJvScFh0MWxENWdCX0E




Laboratorio 6:

https://drive.google.com/open?id=0B7Ct7K_LTJvSOHRXd2RTSlhkY2M




Parte 2



Código Final de FormaNumerosController.java (Código de Referencia del laboratorio anterior)

https://drive.google.com/open?id=0B7Ct7K_LTJvSRkRKa1hqcXJmRzQ







Laboratorio 7 (Nombres, AppRepaso3):


https://drive.google.com/open?id=0B7Ct7K_LTJvSVl9CUmd3VXNpaUk


Luego de haber terminado con los botones iniciales del formulario, agregar lo siguiente:
  1. FormaNombresController.java : agregar un método (btnOrdenarClick) con el atributo @FXML, similar a los otros botones que existen en la clase.
  2. Desde el método programar Collections.sort(ListaNombres)
  3. Agregar en el método que invoque al método MostrarLista().
  4. FormaNombres.FXML :  agregar un botón con texto "Ordenar"
  5. El botón debe tener el fx:id btnOrdenar en la parte de code.
  6. Además asociar el On Action con el nombre del Método btnOrdenarClick



viernes, 11 de noviembre de 2016

Fundamentos de Bases de Datos: Módulo 02: Ejemplos de Procedimientos Almacenados

-- ===================================
-- Fecha: 2016/11/11
-- ===================================

USE CSDaniel;
GO
-- Información Tarjetas
SELECT *
      FROM Tarjeta;
-- Información de los clientes y tarjetas
SELECT *
      FROM vClienteTarjeta;
-- Información de las Tarjetas y sus Saldos
SELECT *
      FROM vTarjetaSaldo;


-- ===================================
-- paActualizarSaldo
-- ===================================

USE [CSDaniel]
GO

/****** Object:  StoredProcedure [dbo].[paActualizarSaldo]    Script Date: 11/11/2016 12:54:26 p. m. ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        Daniel Santizo Saldaña
-- Create date: 2016-11-11
-- Description:   Actualizar el saldo de una tarjeta y la fecha
-- =============================================
CREATE PROCEDURE [dbo].[paActualizarSaldo]
      -- Add the parameters for the stored procedure here
      @CodTarjeta int = 0
AS
BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;

    -- ACTUALIZAR EL SALDO de la Tarjeta @CodTarjeta
      DECLARE @Saldo Decimal;
      -- RECUPERA EL SALDO
      SELECT @Saldo = Saldo
            FROM vTarjetaSaldo
            WHERE CodTarjeta = @CodTarjeta;
      -- ACTUALIZA EN TARJETA
      UPDATE Tarjeta
            SET SaldoActual = @Saldo, FechaSaldo = GETDATE()
            WHERE CodTarjeta=@CodTarjeta;
END

GO




-- Actualizar el Saldo de la Tarjeta CodTarjeta = 1589
EXEC paActualizarSaldo 1589;
-- Consultar información
SELECT *
      FROM Tarjeta
      WHERE CodTarjeta=1589;

-- Información de Tarjetas y sus Saldos
SELECT T.CodCliente,
      v.CodTarjeta, v.CargoTotal, v.AbonoTotal,
      v.Saldo
      FROM vTarjetaSaldo v
      INNER JOIN Tarjeta T
      ON T.CodTarjeta = v.CodTarjeta
      ORDER BY T.CodCliente, v.CodTarjeta;

-- VISTA vClienteSaldo
SELECT *
      FROM vClienteSaldo
      ORDER BY CodCliente, CodTarjeta;

-- UPDATE / SELECT
SELECT T.CodCliente, T.CodTarjeta,
      T.FechaSaldo, T.SaldoActual,
      vCS.CodCliente, vCS.CodTarjeta,
      vCS.Saldo
      FROM Tarjeta T
      INNER JOIN vClienteSaldo vCS
            ON T.CodTarjeta = vCS.CodTarjeta
      WHERE T.CodCliente = 2;






-- ===================================
-- vClienteSaldo
-- ===================================

USE [CSDaniel]
GO

/****** Object:  View [dbo].[vClienteSaldo]    Script Date: 11/11/2016 12:52:57 p. m. ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE VIEW [dbo].[vClienteSaldo]
AS
SELECT dbo.Tarjeta.CodCliente, dbo.vTarjetaSaldo.CodTarjeta,    
      dbo.vTarjetaSaldo.CargoTotal, dbo.vTarjetaSaldo.AbonoTotal,
      dbo.vTarjetaSaldo.Saldo
      FROM dbo.Tarjeta
      INNER JOIN dbo.vTarjetaSaldo
      ON dbo.Tarjeta.CodTarjeta = dbo.vTarjetaSaldo.CodTarjeta
GO

GRANT SELECT ON [dbo].[vClienteSaldo] TO [ServicioCliente] AS [dbo]
GO



-- ===================================
-- paActualizarCliente
-- ===================================

USE [CSDaniel]
GO

/****** Object:  StoredProcedure [dbo].[paActualizarCliente]    Script Date: 11/11/2016 12:54:32 p. m. ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        Daniel Santizo Saldaña
-- Create date: 2016-11-11
-- Description:   Actualizar los Saldos de las Tarjetas de un Cliente
-- =============================================
CREATE PROCEDURE [dbo].[paActualizarCliente]
      -- Add the parameters for the stored procedure here
      @CodCliente int = 0
AS
BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;

    -- Insert statements for procedure here
      UPDATE Tarjeta
            SET FechaSaldo = GETDATE(),
                  SaldoActual = vClienteSaldo.Saldo
            FROM vClienteSaldo
            WHERE Tarjeta.CodCliente = @CodCliente
            AND Tarjeta.CodTarjeta = vClienteSaldo.CodTarjeta;
END

GO







-- Clientes y Tarjetas
SELECT C.CodCliente, C.Apellido, C.Nombre,
      T.CodTarjeta, T.FechaSaldo, T.SaldoActual
      FROM Cliente C
      INNER JOIN Tarjeta T
      ON C.CodCliente = T.CodCliente;

-- Cliente = 1
EXEC paActualizarCliente 1;


-- Genera un script para ejecutar la actualización de saldos de todos
-- los clientes en la tabla.
SELECT 'EXEC paActualizarCliente ', CodCliente,
      ';'
      FROM Cliente




-- =============================================
-- SEGURIDAD
-- =============================================

USE [master]
GO
CREATE LOGIN [Servicio2]
      WITH PASSWORD=N'12345',
      DEFAULT_DATABASE=[CSDaniel],
      DEFAULT_LANGUAGE=[Español],
      CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [CSDaniel]
GO
CREATE USER [Servicio2]
      FOR LOGIN [Servicio2]
GO
USE [CSDaniel]
GO
ALTER ROLE [ServicioCliente]
      ADD MEMBER [Servicio2]
GO