PROGRAMACIÓN DE BASES DE DATOS ORACLE CON JAVA JDBC
GESTIÓN DE DATOS CON VISTAS
SQL SERVER: ÚLTIMO DÍA DEL MES
select EOMONTH ( '20180201' ) "2018", EOMONTH ( '20200201' ) "2020"; GO
2018 2020 --------------- ------------ 2018-02-28 2020-02-29
CREATE FUNCTION [dbo].[fn_LastDayMonth] ( @paramDate DATETIME )
RETURNS DATETIME
BEGIN
declare @resultDate datetime
declare @textDate varchar(15)
declare @vYear int
declare @vMont int
set @vYear = YEAR( @paramDate )
set @vMont = MONTH( @paramDate )
set @textDate = CAST(@vYear as varchar) + '/' + CAST(@vMont as varchar) + '/' + '1'
set @resultDate = CONVERT( datetime, @textDate, 111 )
set @resultDate = DATEADD( month, 1, @resultDate )
set @resultDate = DATEADD( day, -1, @resultDate )
RETURN @resultDate
END
GO
select dbo.fn_LastDayMonth( '20180215' ) "2018", dbo.fn_LastDayMonth( '20200215' ) "2020" GO
2018 2020 ----------------------- ----------------------- 2018-02-28 00:00:00.000 2020-02-29 00:00:00.000
Práctica de Oracle SQL
- Consultar los empleados del departamento de ventas que no tienen comisión.
- Consultar los empleados que ingresaron a laborar el primer trimestre del año 1981.
- Consultar los empleados cuyo ingreso (salario + comisión) supera los 2500.
- Consultar los empleados cuya penúltima letra de su nombre es E.
- Consultar los empleado que la segunda letra de su nombre puede ser A, O u I.
- Se necesita saber cuánto es la planilla por cada departamento.
- Se necesita saber quiénes son los empleados que tienen el más alto salario por departamento.
- Se necesita saber el salario máximo, mínimo y el salario promedio por departamento.
- Se necesita saber cuántos empleados existen por puesto de trabajo.
- Por departamento se necesita saber la cantidad de empleados, el salario mayor, el salario menor, el salario promedio y el importe total de la planilla.
- Por departamento se necesita saber quiénes son los empleados que tienen mayor tiempo en la empresa.
- Por cada país se necesita saber cuántas oficinas existen, la cantidad de empleados y el importe de la planilla.
- Por cada departamento se necesita saber quiénes son los empleados con mayor y menor salario.
- Se necesita saber que departamentos tienen una planilla superior a 50,000.
- Se necesita cuantos empleados han ingresado por año.
- Se necesita cuantos empleados han ingresado cada mes por cada año
- Del esquema HR se necesita saber cuántos empleados ganan comisión. La evaluación se realiza por departamento.
- Por departamento se necesita saber quiénes son los empleados que tienen mayor tiempo en la empresa.
CONSULTAS AVANZADAS CON JDBC
CREATE VIEW V_RESUMEN_CURSO(
PERIODO, CICLO, TARIFA, NOMTARIFA, CURSO, NOMCURSO,
HORAS, SECCIONES, VACTOTAL, VACDISP, MATRICULADOS,
PRECIO, PAGOHORA, INGRESOS, PAGOPROF, UTILIDAD
) AS
WITH V_PREVIA AS(
SELECT
LEFT(IdCiclo,4) PERIODO,
IdCiclo, IdCurso,
COUNT(IDCURSOPROG) SECCIONES,
SUM(Vacantes + Matriculados) VAC_TOTAL,
SUM(Vacantes) VAC_DISP,
SUM(Matriculados) MATRICULADOS,
SUM(Matriculados * PreCursoProg) INGRESOS
FROM DBO.CursoProgramado
WHERE Activo = 1
GROUP BY IdCiclo, IdCurso)
SELECT
V.PERIODO,V.IdCiclo, T.IdTarifa, T.Descripcion, C.IdCurso, C.NomCurso,
T.Horas, V.SECCIONES, V.VAC_TOTAL, V.VAC_DISP, V.MATRICULADOS,
T.PrecioVenta, T.PagoHora, V.INGRESOS,
(T.Horas * T.PagoHora * V.SECCIONES) PAGOPROF,
(V.INGRESOS - (T.Horas * T.PagoHora * V.SECCIONES)) UTILIDAD
FROM DBO.Tarifa T
JOIN DBO.Curso C ON T.IdTarifa = C.IdTarifa
JOIN V_PREVIA V ON C.IdCurso = V.IdCurso
JOIN DBO.Ciclo CI ON V.IdCiclo = CI.IdCiclo;
GO
SELECT * FROM V_RESUMEN_CURSO WHERE CICLO = '2017-02' ORDER BY CURSO; GO
- leerPeriodos: Este servicio permite obtener la lista de todos los periodos.
- leerCiclos: Este servicio permite obtener todos los ciclos de un período.
- leerResumenCurso: Este servicio permite obtener el resumen de cada curso de un período.
package pe.egcc.app.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author Gustavo Coronel
* @blog gcoronelc.blogspot.com
*/
public final class AccesoDB {
private AccesoDB() {
}
public static Connection getConnection() throws SQLException {
Connection cn = null;
try {
// Datos Oracle
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;databaseName=edutec";
String user = "eureka";
String pass = "admin";
// Cargar el driver a memoria
Class.forName(driver).newInstance();
// Obtener el objeto Connection
cn = DriverManager.getConnection(url, user, pass);
} catch (SQLException e) {
throw e;
} catch (ClassNotFoundException e) {
throw new SQLException("ERROR, no se encuentra el driver.");
} catch (Exception e) {
throw new SQLException("ERROR, no se tiene acceso al servidor.");
}
return cn;
}
}
package pe.egcc.app.service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import pe.egcc.app.db.AccesoDB;
public class CursoService {
public List<Map<String, Object>> leerResumenCurso(String ciclo) {
List<Map<String, Object>> lista = new ArrayList<>();
Connection cn = null;
try {
cn = AccesoDB.getConnection();
// Consulta
String sql = "select ciclo, curso, nomcurso, secciones, "
+ "matriculados, ingresos, pagoprof, utilidad "
+ "from V_RESUMEN_CURSO "
+ "where ciclo = ?";
PreparedStatement pstm = cn.prepareStatement(sql);
pstm.setString(1, ciclo);
ResultSet rs = pstm.executeQuery();
// Convertir el rs en una lista
while (rs.next()) {
Map<String, Object> rec = new HashMap<>();
rec.put("ciclo", rs.getString("ciclo"));
rec.put("curso", rs.getString("curso"));
rec.put("nomcurso", rs.getString("nomcurso"));
rec.put("secciones", rs.getString("secciones"));
rec.put("matriculados", rs.getDouble("matriculados"));
rec.put("ingresos", rs.getInt("ingresos"));
rec.put("pagoprof", rs.getDouble("pagoprof"));
rec.put("utilidad", rs.getDouble("utilidad"));
lista.add(rec);
}
rs.close();
pstm.close();
} catch (SQLException e) {
throw new RuntimeException(e.getMessage());
} catch (Exception e) {
throw new RuntimeException("No se puede ejecutar la consulta");
} finally {
try {
cn.close();
} catch (Exception e) {
}
}
return lista;
}
public List<String> leerPeriodos() {
List<String> lista = new ArrayList<>();
// Inicio de Proceso
Connection cn = null;
try {
cn = AccesoDB.getConnection();
String sql = "select distinct "
+ "left(idciclo,4) periodo "
+ "from ciclo order by 1 desc ";
PreparedStatement pstm = cn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
lista.add(rs.getString("periodo"));
}
rs.close();
pstm.close();
} catch (SQLException e) {
throw new RuntimeException(e.getMessage());
} catch (Exception e) {
throw new RuntimeException("No se puede ejecutar la consulta");
} finally {
try {
cn.close();
} catch (Exception e) {
}
}
// Fin de Proceso
return lista;
}
public List<String> leerCiclos(String periodo) {
List<String> lista = new ArrayList<>();
// Inicio de proceso
Connection cn = null;
try {
cn = AccesoDB.getConnection();
String sql = "select idciclo "
+ "from ciclo "
+ "where idciclo like concat(?,'%') "
+ "order by 1 desc";
PreparedStatement pstm = cn.prepareStatement(sql);
pstm.setString(1, periodo);
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
lista.add(rs.getString("idciclo"));
}
rs.close();
pstm.close();
} catch (SQLException e) {
throw new RuntimeException(e.getMessage());
} catch (Exception e) {
throw new RuntimeException("No se puede ejecutar la consulta");
} finally {
try {
cn.close();
} catch (Exception e) {
}
}
// Fin de proceso
return lista;
}
}
package pe.egcc.app.controller;
import java.util.List;
import java.util.Map;
import pe.egcc.app.service.CursoService;
/**
*
* @author Gustavo Coronel
* @blog gcoronelc.blogspot.com
* @email gcoronelc@gmail.com
*/
public class CursoController {
private CursoService cursoService;
public CursoController() {
cursoService = new CursoService();
}
public List<String> leerPeriodos() {
return cursoService.leerPeriodos();
}
public List<String> leerCiclos(String periodo) {
return cursoService.leerCiclos(periodo);
}
public List<Map<String, Object>> leerResumenCurso(String ciclo) {
return cursoService.leerResumenCurso(ciclo);
}
}
public ConResumenCursoView() {
initComponents();
llenarPeriodos();
}
private void llenarPeriodos(){
// Obtener periodos
CursoController cursoController = new CursoController();
List periodos = cursoController.leerPeriodos();
// llenar el combo
cboPeriodo.removeAllItems();
for(String periodo: periodos){
cboPeriodo.addItem(periodo);
}
cboPeriodo.setSelectedIndex(-1);
}
private void cboPeriodoActionPerformed(java.awt.event.ActionEvent evt) {
// Limpiar combo de ciclos
cboCiclo.removeAllItems();
// Verificar periodo seleccionado
int index = cboPeriodo.getSelectedIndex();
if( index == -1 ) {
return;
}
// Obtener periodo seleccionado
String periodo = cboPeriodo.getSelectedItem().toString();
// Traer Ciclos
CursoController cursoController = new CursoController();
List lista = cursoController.leerCiclos(periodo);
// LLEnar combo de ciclos
for(String ciclo: lista){
cboCiclo.addItem(ciclo);
}
cboCiclo.setSelectedIndex(-1);
}
private void btnConsultarActionPerformed(java.awt.event.ActionEvent evt) {
// Limpiamos la tabla
DefaultTableModel tabla;
tabla = (DefaultTableModel) tblRepo.getModel();
tabla.setRowCount(0);
// Se verifica si hay un ciclo seleccionado
if( cboCiclo.getSelectedIndex() == -1 ){
return;
}
try {
// Datos
String ciclo = cboCiclo.getSelectedItem().toString();
// Realizar consulta
CursoController cursoController = new CursoController();
List<Map<String,Object>> lista = cursoController.leerResumenCurso(ciclo);
// Mostrar resultado
for(Map<String,Object> rec: lista){
Object[] rowData = {
rec.get("ciclo"), rec.get("curso"), rec.get("nomcurso"),
rec.get("secciones"), rec.get("matriculados"),
rec.get("ingresos"), rec.get("pagoprof"),rec.get("utilidad")
};
tabla.addRow(rowData);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(rootPane, e.getMessage(),
"ERROR", JOptionPane.ERROR_MESSAGE);
}
}
GIT Y GITHUB
Manejar un programa para la gestión de versiones de tus proyectos de software es fundamental.
GIT es quizás en este momento el software para manejar versiones mas utilizado.
GitHub es un repositorio en web que te permite manejar proyectos gratuitos y privados. Existen otras versiones pero GitHub creo que es el mas utilizado.
En esta oportunidad te presento una manual del uso de Git y GitHub, espero que te sea útil.
En esta sección te presento un video que una aplicación JAVA WEB.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.
Haz click aquí para acceder al código fuente
JAVA JDBC: ResultSet to List
SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production PL/SQL Release 11.2.0.2.0 - Production CORE 11.2.0.2.0 Production TNS for 32-bit Windows: Version 11.2.0.2.0 - Production NLSRTL Version 11.2.0.2.0 - Production
// Datos Oracle
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "eureka";
String pass = "admin";
// Conexión
Class.forName(driver).newInstance();
cn = DriverManager.getConnection(url, user, pass);
// Consulta
String sql = "aquí debe ir la consulta";
PreparedStatement pstm = cn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
// Obtener metadata
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
System.out.println("getColumnName()\tgetColumnLabel()");
for (int i = 1; i <= columns; i++) {
System.out.println(md.getColumnName(i) + "\t" + md.getColumnLabel(i));
}
rs.close();
pstm.close();
select chr_cliecodigo, vch_cliepaterno, vch_cliematerno, vch_clienombre from cliente
getColumnName() getColumnLabel() CHR_CLIECODIGO CHR_CLIECODIGO VCH_CLIEPATERNO VCH_CLIEPATERNO VCH_CLIEMATERNO VCH_CLIEMATERNO VCH_CLIENOMBRE VCH_CLIENOMBRE
select chr_cliecodigo cod, vch_cliepaterno pat, vch_cliematerno mat, vch_clienombre nom from cliente
getColumnName() getColumnLabel() COD COD PAT PAT MAT MAT NOM NOM
select tm.vch_tipodescripcion tipo, sum(m.dec_moviimporte) importe from tipomovimiento tm join movimiento m on tm.chr_tipocodigo = m.chr_tipocodigo group by tm.vch_tipodescripcion
getColumnName() getColumnLabel() TIPO TIPO IMPORTE IMPORTE
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.12-log MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
// Datos MySQL
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/EUREKABANK";
String user = "eureka";
String pass = "admin";
// Conexión
Class.forName(driver).newInstance();
cn = DriverManager.getConnection(url, user, pass);
// Consulta
String sql = "aquí debe ir la consulta";
PreparedStatement pstm = cn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
// Obtener metadata
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
System.out.println("getColumnName()\tgetColumnLabel()");
for (int i = 1; i <= columns; i++) {
System.out.println(md.getColumnName(i) + "\t" + md.getColumnLabel(i));
}
rs.close();
pstm.close();
select chr_cliecodigo, vch_cliepaterno, vch_cliematerno, vch_clienombre from cliente
getColumnName() getColumnLabel() chr_cliecodigo chr_cliecodigo vch_cliepaterno vch_cliepaterno vch_cliematerno vch_cliematerno vch_clienombre vch_clienombre
select chr_cliecodigo cod, vch_cliepaterno pat, vch_cliematerno mat, vch_clienombre nom from cliente
getColumnName() getColumnLabel() chr_cliecodigo cod vch_cliepaterno pat vch_cliematerno mat vch_clienombre nom
select tm.vch_tipodescripcion tipo, sum(m.dec_moviimporte) importe from tipomovimiento tm join movimiento m on tm.chr_tipocodigo = m.chr_tipocodigo group by tm.vch_tipodescripcion
getColumnName() getColumnLabel() vch_tipodescripcion tipo importe importe
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1(Build 7601: Service Pack 1)
// Datos SQL Server
String driver = "net.sourceforge.jtds.jdbc.Driver";
String url = "jdbc:jtds:sqlserver://localhost:1433/EUREKABANK";
String user = "sa";
String pass = "sql";
// Conexión
Class.forName(driver).newInstance();
cn = DriverManager.getConnection(url, user, pass);
// Consulta
String sql = "aquí debe ir la consulta";
PreparedStatement pstm = cn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
// Obtener metadata
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
System.out.println("getColumnName()\tgetColumnLabel()");
for (int i = 1; i <= columns; i++) {
System.out.println(md.getColumnName(i) + "\t" + md.getColumnLabel(i));
}
rs.close();
pstm.close();
select chr_cliecodigo, vch_cliepaterno, vch_cliematerno, vch_clienombre from cliente
getColumnName() getColumnLabel() chr_cliecodigo chr_cliecodigo vch_cliepaterno vch_cliepaterno vch_cliematerno vch_cliematerno vch_clienombre vch_clienombre
select chr_cliecodigo cod, vch_cliepaterno pat, vch_cliematerno mat, vch_clienombre nom from cliente
getColumnName() getColumnLabel() cod cod pat pat mat mat nom nom
select tm.vch_tipodescripcion tipo, sum(m.dec_moviimporte) importe from tipomovimiento tm join movimiento m on tm.chr_tipocodigo = m.chr_tipocodigo group by tm.vch_tipodescripcion
getColumnName() getColumnLabel() vch_tipodescripcion tipo importe importe
package pe.egcc.app.util;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author Eric Gustavo Coronel Castillo
* @blog gcoronelc.blogspot.com
*/
public final class JdbcUtil {
private JdbcUtil() {
}
public static List<Map<String, ?>> rsToList(ResultSet rs) throws SQLException {
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
List<Map<String, ?>> results = new ArrayList<Map<String, ?>>();
while (rs.next()) {
Map<String, Object> row = new HashMap<String, Object>();
for (int i = 1; i <= columns; i++) {
row.put(md.getColumnLabel(i).toLowerCase(), rs.getObject(i));
}
results.add(row);
}
return results;
}
}
List<Map<String,?>> lista = JdbcUtil.rsToList(rs);
Descargar Proyecto
SQL SERVER - COPIAS DE SEGURIDAD
INTRODUCCIÓN
En esta oportunidad les traigo una guía práctica para crear copias de seguridad y sus restauración utilizando diferentes situaciones.
GUIA
CÓDIGO FUENTE - EUREKA-WEB-ORACLE-JDBC
En esta oportunidad te presento un video donde te explico cómo ejecutar el código fuente de una aplicación Java Web, utilizando HTML, CSS, JavaScript, AJAX y JSON, en la capa de persistencia se utiliza JDBC y base de datos Oracle XE 11g.
Tú tienes acceso al código fuente de esta aplicación, después del video esta el enlace.
ORACLE SQL - CONSULTAS BASICAS
El tema a desarrollar en esta oportunidad es CONSULTAS BÁSICAS.
PROGRAMACIÓN DE BASES DE DATOS ORACLE CON JAVA JDBC
ORACLE SQL - INTRODUCCION
Primera lección del taller ORACLE SQL.
El taller se esta desarrollando con la versión 11g con Windows Server 2008.
CÓDIGO FUENTE - EUREKA-WEB-ORACLE-JDBC
En esta oportunidad te presento un video donde te explico cómo ejecutar el código fuente de una aplicación Java Web, utilizando HTML, CSS, JavaScript, AJAX y JSON, en la capa de persistencia se utiliza JDBC y base de datos Oracle XE 11g.
Tú tienes acceso al código fuente de esta aplicación, después del video esta el enlace.
CREACIÓN DEL ESQUEMA EUREKA
EUREKABANK DATABASE
El esquema de datos EUREKA lo utilizo en mis cursos de Java y Oracle, por tal motivo recibo constantemente preguntas de como crearlo.
En esta guía encontrara paso a paso, como crear el esquema EUREKA, desde la instalación de Oracle 10g XE.
CÓDIGO FUENTE - EUREKA-WEB-ORACLE-JDBC
En esta oportunidad te presento un video donde te explico cómo ejecutar el código fuente de una aplicación Java Web, utilizando HTML, CSS, JavaScript, AJAX y JSON, en la capa de persistencia se utiliza JDBC y base de datos Oracle XE 11g.
Tú tienes acceso al código fuente de esta aplicación, después del video esta el enlace.
Java Web Lección 03: Patrón MVC
INTRODUCCIÓN
El Patrón Model-View-Controller (MVC) es el mas utilizado en desarrollo web.
Este patrón permite estructurar una aplicación web en tres capas, donde cada una tiene una responsabilidad bien definida, haciendo mas fácil el desarrollo y mantenimiento de la aplicación.
DIAPOSITIVA
CÓDIGO FUENTE - EUREKA-WEB-ORACLE-JDBC
En esta oportunidad te presento un video donde te explico cómo ejecutar el código fuente de una aplicación Java Web, utilizando HTML, CSS, JavaScript, AJAX y JSON, en la capa de persistencia se utiliza JDBC y base de datos Oracle XE 11g.
Tú tienes acceso al código fuente de esta aplicación, después del video esta el enlace.
Java Web Lección 03: Patrón MVC
INTRODUCCIÓN
El Patrón Model-View-Controller (MVC) es el mas utilizado en desarrollo web.
Este patrón permite estructurar una aplicación web en tres capas, donde cada una tiene una responsabilidad bien definida, haciendo mas fácil el desarrollo y mantenimiento de la aplicación.














