En este camino de la programación he investigado sobre muchas cosas que fueron implementadas en el trabajo y en la universidad, entonces para poder tener un repositorio donde explique que hice para resolver los problemas que tuve en ese momento, es que creo este blog donde iré publicando parte de código que espero sea de su ayuda.
En
esta oportunidad vamos a enseñar a como crear un DataSource que este alojada en
un servidor de aplicaciones o configurando los datos en una clase Java.
1.- En una clase Java. -
Necesitaremos descargar la librería de Apache
- DBCP de la siguiente URL:
public static DataSource getDatasource() throws NamingException {
BasicDataSource ds = new BasicDataSource();
ds.setUsername("USUARIO");
ds.setPassword("PASSWORD");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE");//Cadena de conexion
ds.setDriverClassName("oracle.jdbc.OracleDriver");//Driver de conexion
return ds;
}
2.- Desde un servidor de aplicaciones.-
Solo se necesita realizar la configuración del DataSurce en el servidor de aplicacion y obtener el nombre con el que se crea.
public static DataSource getDatasource() throws NamingException {
//Aqui pasamos el nombre del DataSource creado en el Servidor de Aplicaciones
String DATASOURCE_NAME = "jdbc/DataDase";
Context ctx = new InitialContext();
return (DataSource)ctx.lookup(DATASOURCE_NAME);
}
Bueno voy mostrar un ejemplo
donde enviaremos un parámetro desde una clase de java y nos retornada un
VARCHAR desde Oracle que será consultado en un función que se encuentra dentro
de un paquete.
Para esto comenzaremos creando el
paquete y la función, usaremos HR para esto(se crea cuando instalamos el Oracle):
create or replace
PACKAGE PRUEBAMYBATIS
AS
FUNCTION obtenerNombres(cEmp_Id_in IN NUMBER)
RETURN VARCHAR2;
END;
/
create or replace
PACKAGE BODY PRUEBAMYBATIS
AS
FUNCTION obtenerNombres(cEmp_Id_in IN NUMBER)
RETURN VARCHAR2 IS
varName VARCHAR2(100);
BEGIN
SELECT (FIRST_NAME ||' '|| LAST_NAME)
INTO varName
FROM EMPLOYEES
WHERE EMPLOYEE_ID = cEmp_Id_in;
RETURN varName;
END;
END;
Usaremos archivos de configuracion donde guardaremos inf. de la base de datos como el usuario o la clave...
# El nombre del archivo es "variablesDataBase.properties"
# Aqui almacenaremos variables de la base de datos
# no es seguro guardar aqui pero para hacer algo novedoso :=)
vIP = localhost
vPort = 1521
vSID = orcl
VUsuario = HR
vClave = prueba
Comenzaremos creando el archivo de configuracion(xmlMyBatis.xml):
Creamos
una clase donde estarán nuestras anotaciones donde indicaremos el paquete y la función
o procedimiento... Funciona igual... solo que los procedimientos no retornan
valor...
Creamos una clase que nos retornara el SqlSession para poder llamarlo cuando queramos....
public class conector {
private final static Logger log = Logger.getLogger(conector.class.getName());
SqlSessionFactory sqlSession;
static CargarVariables cargarVariables = new CargarVariables();
public SqlSessionFactory getSqlSessionMB(){
Reader reader = null;
try{
reader = Resources.getResourceAsReader("JAVA/MYBATIS/xmlMyBatis.XML");
}catch(IOException ioEx){
log.warning("No se cargo el archivo de conf. "+ioEx.getMessage());
}
Properties propBD = new Properties();
propBD.setProperty("driver", "oracle.jdbc.driver.OracleDriver");
propBD.setProperty("url", cargarVariables.obtenerURL());
propBD.setProperty("username", cargarVariables.obtenerUsuarioDB());
propBD.setProperty("password", cargarVariables.obtenerClaveDB());
sqlSession = new SqlSessionFactoryBuilder().build(reader,propBD);
return sqlSession;
}
}
Y
por último crearemos un main class donde enviaremos nuestro parámetro y
consultaremos datos del empleado.
public void enter(){
SqlSession sqlSession = new conector().getSqlSessionMB().openSession();
MapperPrueba mbMapper = sqlSession.getMapper(MapperPrueba.class);
Map parametros = new HashMap();
parametros.put("cEmp_Id_in", "100");
mbMapper.obtenerNombApe(parametros);
String tmpNomApe = parametros.get("cNomApe_out").toString();
System.out.println("LOS DATOS SON : "+tmpNomApe) ;
}
Bueno esto sería mi aporte a la
comunidad JAVA... por favor comenta si tienes alguna mejora o recomendación...
Claro también si tienes alguna duda... Estoy adjuntando el proyecto...
dentro están las librerías y la guía de MyBatis... http://www.mediafire.com/?vqbhwhe1firc5t3
Después de revisar la poca documentación de esta librería (jcalendar-1.4) no
logre dar cierta funcionalidad al evento de cambiar alguna fecha, se me ocurrió
probar con algunos eventos y pues "FUNCIONO".
Bueno primero creamos el JDateChooser y a continuación vamos
a implementar este evento que nos ayudara.
//Mi JDateChooser es llamado JD_Fecha
JD_Fecha.getDateEditor().addPropertyChangeListener(new PropertyChangeListener(){
public void propertyChange(PropertyChangeEvent e) {
//Aquí agregaremos la funcionalidad que queremos
//por ejemplo al seleccionar una fecha le mostrare un diálogo con la fecha de hoy
JOptionPane.showMessageDialog(rootPane, "la fecha es "+new Date());
}
});
Hola a todo el mundo que está
metido en este mundo de programación, este es mi primer post y espero que pueda
satisfacer sus necesidades. Bueno voy a pasar a mostrar un
poco de código para que puedan observar lo fácil que es mostrar una vista
preliminar de nuestros reportes desde java... Lo primero es nuestra conexión
a la base de datos, para este ejemplo usare una base de datos en access... en
fin, no importa el motor de base de datos, solo agregar el jdbc y cambiar la
cadena de conexión.
La clase tiene como nombre Modulo()
public class Modulo {
private final static Logger LOGGER = Logger.getLogger(Modulo.class.getName()); //Es muy importante el uso del LOGGER para poder mostrar mensajes y no el famoso System.out.print();
String Driver="sun.jdbc.odbc.JdbcOdbcDriver";
String URL="jdbc:odbc:Driver=Microsoft Access Driver (*.mdb);DBQ=C:/DataBase.mdb"; //Aquí deberían cambiar según el motor de base de datos que usan.
String User="Administrador";
String Password="pass";
public Connection getConexionBD(){
Connection cn = null;
try {
Class.forName(Driver).newInstance();
cn=DriverManager.getConnection(URL,User,Password);
LOGGER.info("Se conecto!");
} catch (Exception e) {
LOGGER.warning(e.getMessage());
}
return cn; //Retorna la conexion
}
}
En esta clase tenemos un metodo llamado MostrarReporteViewer(), recibe como parametros la ruta donde esta nuestro reporte .jasper y los parametros del reporte.
public class Reportes {
Connection cn=null;
public void MostrarReporteViewer(String Ruta,Map parametros){
try {
BasicConfigurator.configure();
Modulo obj = new Modulo();
cn=obj.getConexionBD();
JasperReport reporte = (JasperReport) JRLoader.loadObject(Ruta);
////////////////////////////////////
parametros.put(JRParameter.REPORT_LOCALE, Locale.US);
//Esta línea es muy importante si el formato de los números de tu país es “999,999.00”,
//el IReport te mostrara por default “999.999,00”, con esta simple línea podrás solucionar ese problema.
////////////////////////////////////
JasperPrint jasperPrint = JasperFillManager.fillReport(reporte,parametros, cn);
JasperViewer jviewer=new JasperViewer(jasperPrint,false);
jviewer.setTitle("");
jviewer.setVisible(true);
cn.close();
} catch (JRException ex) {
JOptionPane.showMessageDialog(null,"Problemas al Diseñar el reporte");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"Problemas en la BD");
}
}
}
En esta clase arrancamos el reporte.
public class Ver {
static Reportes reportes = new Reportes();
public static void main(String[] args) {
String Ruta="C:/ReportePrueba.jasper";//Ruta de reporte .Jasper
Map parametros = new HashMap();//Parametros mapeados
parametros.put("Codigo","001");//Parametro llamado "Codigo", se envia 001
reportes.MostrarReporteViewer(Ruta, parametros);
}
}