Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas

GESTIÓN DE DATOS CON VISTAS

GESTIÓN DE DATOS CON VISTAS
INTRODUCCION
En este artículo explico cómo utilizar las vistas para uniformizar los datos en la construcción de consultas y reportes.
VIDEO

PROGRAMACIÓN DE BASES DE DATOS ORACLE CON JAVA JDBC

Aprenderás a aplicar correctamente el API JDBC de Java para programar bases de datos ORACLE.
Aprenderás los conceptos fundamentales de Oracle Database y a crear el esquema de trabajo que se utilizará durante el curso.
Estarás capacitado para aplicar el API JDBC de Java para ejecutar consultas sin parámetros, consultas con parámetros, gestión de transacciones y ejecutar procedimientos almacenados que retornan cursor y que gestionan transacciones.
Estarás capacitado para desarrollar una aplicación de escritorio empresarial que ayude a las empresas a gestionar sus procesos comerciales.
Cupón de descuento: JDBCORACLE10



SQL SERVER: ÚLTIMO DÍA DEL MES

CÓMO OBTENER EL ÚLTIMO DÍA DEL MES EN SQL SERVER
En muchas ocasiones necesitamos conocer el último día de un determinado mes, en SQL Server desde la versión 2012 contamos con la función EOMONTH, pero en versiones anteriores debemos utilizar algún artificio.
SQL Server 2012 o superior
Desde la versión 2012 podemos utilizar la función EOMONTH.
Por ejemplo, la siguiente consulta permite averiguar el último día del mes de febrero para el año 2018 y 2020.
select EOMONTH ( '20180201' ) "2018", EOMONTH ( '20200201' ) "2020";
GO
El resultado es el siguiente:
2018            2020
--------------- ------------
2018-02-28      2020-02-29
El parámetro que recibe es una fecha del mes a evaluar.
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.
SQL Server 2008
Si tienes la versión 2008, debes crear tu propia función.
En esta oportunidad te presento una función que podrías probar para obtener el mismo resultado que la función EOMONTH.
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
Para verificar la función, se ha realizado la misma prueba que en el caso anterior.
select 
  dbo.fn_LastDayMonth( '20180215' ) "2018", 
  dbo.fn_LastDayMonth( '20200215' ) "2020"
GO
A continuación tienes el resultado.
2018                      2020
-----------------------   -----------------------
2018-02-28 00:00:00.000   2020-02-29 00:00:00.000
CÓDIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



Práctica de Oracle SQL

Práctica de Oracle SQL
Contar con una guía de ejercicios es muy importante para practicar el lenguaje SQL en Oracle.
En este artículo tienes una serie de ejercicios que te permitirán desarrollar el lenguaje SQL con base de datos Oracle.
ESQUEMA SCOTT
Desarrolle las siguientes consultas utilizando el esquema SCOTT.
  1. Consultar los empleados del departamento de ventas que no tienen comisión.
  2. Consultar los empleados que ingresaron a laborar el primer trimestre del año 1981.
  3. Consultar los empleados cuyo ingreso (salario + comisión) supera los 2500.
  4. Consultar los empleados cuya penúltima letra de su nombre es E.
  5. Consultar los empleado que la segunda letra de su nombre puede ser A, O u I.
  6. Se necesita saber cuánto es la planilla por cada departamento.
  7. Se necesita saber quiénes son los empleados que tienen el más alto salario por departamento.
  8. Se necesita saber el salario máximo, mínimo y el salario promedio por departamento.
ESQUEMA HR
Desarrolle las siguientes consultas utilizando el esquema HR.
  1. Se necesita saber cuántos empleados existen por puesto de trabajo.
  2. 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.
  3. Por departamento se necesita saber quiénes son los empleados que tienen mayor tiempo en la empresa.
  4. Por cada país se necesita saber cuántas oficinas existen, la cantidad de empleados y el importe de la planilla.
  5. Por cada departamento se necesita saber quiénes son los empleados con mayor y menor salario.
  6. Se necesita saber que departamentos tienen una planilla superior a 50,000.
  7. Se necesita cuantos empleados han ingresado por año.
  8. Se necesita cuantos empleados han ingresado cada mes por cada año
  9. Del esquema HR se necesita saber cuántos empleados ganan comisión. La evaluación se realiza por departamento.
  10. Por departamento se necesita saber quiénes son los empleados que tienen mayor tiempo en la empresa.
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



CONSULTAS AVANZADAS CON JDBC

CONSULTAS AVANZADAS UTILIZANDO VISTAS Y JDBC
En este artículo voy a resolver un caso donde ilustrare como desarrollar consultas avanzadas con VISTAS y JDBC.
PROYECTO PROPUESTO
Base de Datos
Se trata de una base de datos en SQL Server llamada EDUTEC.
En esta base de datos donde se registra los cursos que se programan por ciclo, cada mes corresponde a un nuevo ciclo de cursos de extensión profesional que ofrece EDUTEC.
También se registran las matrículas y sus respectivas notas.
El script para crear la base de datos lo encuentras en:
https://github.com/gcoronelc/databases
Requerimiento
La gerencia de EDUTEC necesita una aplicación que le permita consultar la cantidad de alumnos matriculados, los ingresos y pago al profesor de cada uno de los cursos programados en un determinado ciclo.
La interfaz de usuario sugerida es la siguiente:
ANÁLISIS DEL REQUERIMIENTO
Obtener Resumen de Datos
Para muchos casos en los que se requieren resúmenes de datos es mejor crear una vista, ya que los datos resumidos en ella pueden servir para muchos reportes o consultas.
Otra de las ventajas de las vistas es que ocultan toda la complejidad de la sentencia SELECT y también estandarizan los nombres de las columnas.
Para este caso se ha diseñado la siguiente vista:
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
A continuación se tiene una prueba de su ejecución:
SELECT *
 FROM V_RESUMEN_CURSO
 WHERE CICLO = '2017-02'
 ORDER BY CURSO;
GO
Arquitectura de la Aplicación
Se trata de una arquitectura en capas, tal como se ilustra en la siguiente imagen.
Identificación de Servicios
Los servicios que se necesitan son:
  • 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.
Servicio: leerPeriodos
Este servicio retorna todos los periodos registrados en la base de datos, no recibe ningún parámetro.
Servicio: leerCiclos
Este servicio retorna todos los ciclos de un periodo.
Servicio: leerResumenCurso
Para este caso, el dato de entrada del servicio debe ser el ciclo, por ejemplo 2017-01, por cada mes se tiene un ciclo, quiere decir que en un año se tienen 12 ciclos.
El servicio se encarga de consultar la base de datos, en este caso debe hacer uso de la vista V_RESUMEN_CURSO.
El resultado lo retorna en una lista de objetos Map, en caso de que el ciclo no sea correcto, la lista estará vacía.
CODIGO FUENTE - EUREKA-CS-ORACLE-JDBC
En esta sección te presento un video de una aplicación CLIENTE-SERVIDOR desarrollada con Java y Oracle.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.
PROGRAMACIÓN
Acceso a la Base de Datos
La clase AccesoDB es la que proporciona el método getConnection que permite obtener un objeto de tipo Connection que permite el acceso a la base de datos.
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;
  }
  
}
Capa Service
A continuación tienes la clase CursoService.
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;
  }

} 
Capa Controller
A continuación tienes la clase CursoController.
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);
  }

}

Capa View
A continuación tienes el formulario:
Constructor del Formulario
A continuación se tiene el constructor del formulario:
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);
  
}
Control: cboPeriodo
A continuación se tiene la programación del combo cboPeriodo, cada vez que se selecciona un nuevo elemento se debe actualizar el combo cboCiclo:
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);

}
Control: btnConsultar
A continuación se tiene la programación del botón btnConsultar, en este caso se debe recoger el ciclo seleccionado en cboCiclo para poder ejecutar la consulta.
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);
  }
}
Finalmente, espero que este ejemplo te sea útil para entender la programación en capas y programación orientada a servicios.
CODIGO FUENTE - EUREKA-WEB-MYSQL-SPRING
En esta sección te presento un video de una aplicación web desarrollada SPRING FRAMEWORK y MYSQL.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



GIT Y GITHUB

GIT Y GITHUB
FUNDAMENTOS

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.

MANUAL
CODIGO FUENTE

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

JAVA JDBC: ResultSet to List
INTRODUCCIÓN
Cuando desarrollamos una aplicación con JDBC, una de las tareas que programamos frecuentemente es pasar un objeto de tipo ResultSet a una lista de objetos Map, List<Map<String,Object>>.
Por ejemplo, cuando queremos hacer una consulta a varias tablas, luego el resultado se debe mostrar en una tabla o quisas en un reporte con Jasper Report.
En este oportunidad desarrollara la clase JdbcUtil con un método que permite pasar un objeto ResultSet a una lista, la base de datos a utilizar es EurekaBank.
Las pruebas se realizan con 3 motores de bases de datos diferentes: Oracle, MySQL y SQL Server.
La base de datos la puede descargar desde:
METADATA DEL ResultSet
Para acceder a la metadata de un objeto ResultSet se utiliza el metodo getMetaData(), para obtener la cantidad de columnas se utiliza el método getColumnCount() de la metadata, para obtener el nombre de la columna se utiliza el método getColumnName(i) de la metadata, para obtener la etiqueta de la columna se utiliza el método getColumnLabel(i) de la metadata, siendo i el número de la columna e inicia en 1.
PRUEBA CON ORACLE
La versión de Oracle utilizada es la 11.2 y el driver jdbc utilizado es ojdbc6.jar.:
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
El código base a utilizar es:
// 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();
Consultando un tabla
La consulta a utilizar es la siguiente:
select 
  chr_cliecodigo, vch_cliepaterno, 
  vch_cliematerno, vch_clienombre 
from cliente
El resultado es el siguiente:
getColumnName()  getColumnLabel()
CHR_CLIECODIGO   CHR_CLIECODIGO
VCH_CLIEPATERNO  VCH_CLIEPATERNO
VCH_CLIEMATERNO  VCH_CLIEMATERNO
VCH_CLIENOMBRE   VCH_CLIENOMBRE
Cambiando el titulo de las columnas
La consulta a utilizar es la siguiente:
select 
  chr_cliecodigo cod, vch_cliepaterno pat, 
  vch_cliematerno mat, vch_clienombre nom
from cliente
El resultado es el siguiente:
getColumnName()   getColumnLabel()
COD               COD
PAT               PAT
MAT               MAT
NOM               NOM
Consultando dos tablas
La consulta a utilizar es la siguiente:
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
El resultado es el siguiente:
getColumnName()   getColumnLabel()
TIPO              TIPO
IMPORTE           IMPORTE
De los resultados obtenidos se puede concluir que tanto getColumnName() y getColumnLabel() arrojan los mismos valores, se puede utilizar cualquiera de los dos métodos.
PRUEBA CON MYSQL
La versión de MySQL utilizada es la 5.6 y el driver jdbc utilizado es la versión 5.1.23:
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.
El código base a utilizar es:
// 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();
Consultando un tabla
La consulta a utilizar es la siguiente:
select 
  chr_cliecodigo, vch_cliepaterno, 
  vch_cliematerno, vch_clienombre 
from cliente
El resultado es el siguiente:
getColumnName()   getColumnLabel()
chr_cliecodigo    chr_cliecodigo
vch_cliepaterno   vch_cliepaterno
vch_cliematerno   vch_cliematerno
vch_clienombre    vch_clienombre
Cambiando el titulo de las columnas
La consulta a utilizar es la siguiente:
select 
  chr_cliecodigo cod, vch_cliepaterno pat, 
  vch_cliematerno mat, vch_clienombre nom
from cliente
El resultado es el siguiente:
getColumnName()    getColumnLabel()
chr_cliecodigo     cod
vch_cliepaterno    pat
vch_cliematerno    mat
vch_clienombre     nom
Consultando dos tablas
La consulta a utilizar es la siguiente:
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
El resultado es el siguiente:
getColumnName()        getColumnLabel()
vch_tipodescripcion    tipo
importe                importe
De los resultados obtenidos se puede concluir que getColumnLabel() sería la opción mas conveniente a utilizar.
PRUEBA CON SQL SERVER
La versión de SQL Server utilizada es la 2008 R2 y el driver jdbc utilizado es JTDS versión 1.2.5:
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)
El código base a utilizar es:
// 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();
Consultando un tabla
La consulta a utilizar es la siguiente:
select 
  chr_cliecodigo, vch_cliepaterno, 
  vch_cliematerno, vch_clienombre 
from cliente
El resultado es el siguiente:
getColumnName()    getColumnLabel()
chr_cliecodigo     chr_cliecodigo
vch_cliepaterno    vch_cliepaterno
vch_cliematerno    vch_cliematerno
vch_clienombre     vch_clienombre
Cambiando el titulo de las columnas
La consulta a utilizar es la siguiente:
select 
  chr_cliecodigo cod, vch_cliepaterno pat, 
  vch_cliematerno mat, vch_clienombre nom
from cliente
El resultado es el siguiente:
getColumnName()    getColumnLabel()
cod                cod
pat                pat
mat                mat
nom                nom
Consultando dos tablas
La consulta a utilizar es la siguiente:
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
El resultado es el siguiente:
getColumnName()        getColumnLabel()
vch_tipodescripcion    tipo
importe                importe
De los resultados obtenidos se puede concluir que ambos metodos arrojan los mismos resultados, por lo tanto, se puede utilizar cualquiera de los dos.
CLASE UTILITARIA
A continuación tenemos la clase propuesta para pasar un objeto ResultSet a una List<Map<String,?>>.
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;
  }

}
A continuación se tiene un ejemplo de como utilizar esta clase:
 
List<Map<String,?>> lista = JdbcUtil.rsToList(rs);
 
Siendo rs un objeto ResultSet.
Puede descargar el proyecto desde el siguiente enlace:
Descargar Proyecto
CÓDIGO FUENTE
En esta sección te presento un video que una aplicación CLIENTE-SERVIDOR desarrollada con Java y Oracle.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



SQL SERVER - COPIAS DE SEGURIDAD

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

ORACLE SQL - CONSULTAS BASICAS - GUSTAVO CORONEL
TALLER ORACLE SQL - LECCIÓN 02

El tema a desarrollar en esta oportunidad es CONSULTAS BÁSICAS.

PROGRAMACIÓN DE BASES DE DATOS ORACLE CON JAVA JDBC

Aprenderás a aplicar correctamente el API JDBC de Java para programar bases de datos ORACLE.
Aprenderás los conceptos fundamentales de Oracle Database y a crear el esquema de trabajo que se utilizará durante el curso.
Estarás capacitado para aplicar el API JDBC de Java para ejecutar consultas sin parámetros, consultas con parámetros, gestión de transacciones y ejecutar procedimientos almacenados que retornan cursor y que gestionan transacciones.
Estarás capacitado para desarrollar una aplicación de escritorio empresarial que ayude a las empresas a gestionar sus procesos comerciales.
Cupón de descuento: JDBCORACLE10


ORACLE SQL - INTRODUCCION

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

SQL SERVER ORACLE MYSQL JAVA JAVAEE JDBC MVC DAO PATRONES ANDROID SERVLETS JSP

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

JAVA WEB - LECCIÓN 02: PATRON 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

SQL SERVER ORACLE MYSQL JAVA JAVAEE JDBC MVC DAO PATRONES ANDROID SERVLETS JSP WEB JAVA WEB SERVLETS JSP MVC DAO EJB JDBC

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



TALLER VIRTUAL DE SPRING FRAMEWORK

Acceso a Cursos Virtuales