Tutorial-Java, API que Ahorra el Tiempo de Desarrollo


Tutorial Java

Cómo lo hacen en Java

Un JDBC de Capa Superior.

Lo que te voy a mostrar en éste artículo te ayudará a crear aplicaciones con acceso a base de datos mucho más velozmente que si lo harías de manera manual.

Te contaré la fórmula que yo utilizo para el desarrollo rápido de aplicaciones, que consiste en una excelente librería de acceso/lectura a base de datos.

Si…! se trata de una librería o API que he desarrollado y que utilizo, el cual el día de hoy te regalaré ya que podrás descargarlo completito  incluido el código fuente, caso quieras hacerle modificaciones.

La rapidez es importante para nosotros, verdad que si?…

Lo es para mi..

.. por que cuando más rápido termino un proyecto, más rápido puedo entregarle al Cliente, el cual queda más que satisfecho y confiante en mi trabajo, además me sobra más tiempo para empezar rápidamente otro proyecto nuevo, lo que representa más ingreso, más rápido.

No he visto a ningún desarrollador de aplicaciones en Java/Swing que desarrollara con una API o librería que lo ayude a disminuir drásticamente su tiempo de desarrollo, la mayoría lo hace directamente con JDBC, claro que sí he conocido a otras personas que utilizan JEE y que aplican tecnologías más avanzadas como Spring o Hibernate, el cual como sabes requiere de una alta curva de aprendizaje.

Un poco de historia.

Desde un principio, la idea de crear una librería que permitiera ejecutar la conexión y los comandos en la base de datos, consistía en ahorrar código cada vez que se creaba una nueva aplicación, código para conexión, comandos para SQL, abrir y cerrar transacción, realizar commit o rollback, controlar excepciones, etc.

Esta librería lo desarrollamos inicialmente en la empresa PROGRESS – FABRICA DE SOFTWARE S.R.L donde trabajo, en colaboración con varios otros programadores y lo bautizamos como ControladorBD ya que se encarga de controlar la lectura y accesos a la Base de Datos desde la aplicacion java.

El objetivo no fue desarrollar un framework especificamente, ni una API para el desarrollo de nuestras aplicaciones sino más bien nació con fines académicos, pero fue pasando el tiempo y los mismos alumnos al finalizar la materia lo fueron utilizando para el desarrollo de sus aplicaciones sin problemas y sin limitaciones en su uso.

No pretendo para nada que el desarrollador reemplace otras librerías mas avanzadas, probadas y con amplio soporte mundial como son Spring, Hibernate o EJB, pero si lo que se desea es desarrollar una aplicacion rapidamente y sin muchos protocolos ni rodeos, evitando realizar mapeos objeto-relacional, considero ésta API una muy buena alternativa, Aunque si se trata de una aplicación robusta, corporativa o para la Web lo que recomiendo al 100% es sin dudar utilizar uno de los frameworks mencionados mas arriba.

Mediante la API ControladorBD, el desarrollador JAVA, puede enviar comandos simples o complejos a la base de datos y utilizar esta librería en sus clases de testes o incluso cuando crea una aplicación del lado del Servidor (Está probado…!!)

No quisiera entrar en detalles de la implementación interna de la API, pero queda abierta la discusión caso alguien desee profundizar en el tema.

Cómo lo utilizo? (Ej. para MySQL)

La utilización de la API ControladorBD se puede realizar en 3 simples pasos, que te muestro a continuación:

Paso 1

Para utilizar la librería ControladorBD dentro de una aplicación en Eclipse, basta con copiar el archivo .jar dentro del proyecto activo, puede ser dentro de una carpeta lib.

Una vez copiado el archivo dentro del proyecto, debe agregar el camino del archivo al Classpath, (Add to build path)

Paso 2

Crear el archivo controlador-bd.properties (respetando las minúsculas) dentro del paquete por defecto (carpeta raiz) de las clases. El archivo debe contener lo siguiente:

# Ej. de Comunicación con MySQL
url=jdbc:mysql://{nombre del servidor}/{nombre de la base de datos}
usuario=root
password=admin
driver=org.gjt.mm.mysql.Driver

Los valores para url, usuario, password son los mismos que se utilizan cuando se trabajan con JDBC. el valor de driver corresponde a la clase jdbc (proveido por el fabricante) que debe ser cargada y depende del motor de la base de datos a utilizar, en nuestro caso MySQL.

No olvide reemplazar los valores de {nombre del servidor} y {nombre de la base de datos} de la propiedad url por los valores correctos

Paso 3

Copiar en el proyecto el DRIVER JDBC del fabricante de la base de datos que se va utilizar, en el caso de MySQL , el driver puede ser descargado de esta página http://www.mysql.com/downloads/connector/j/

Aquí les dejo un enlace al conector mysql-connector-java-3.1.10-bin que es el que actualmente utilizo en las aplicaciones con la versión 5.0.27-community-nt-log del MySQL

Esta librería también debe agregarse a la vía de Construcción o classpath (Add to build path…)

Ambientes IDEs de Desarrollo soportados.

JAVA 6 – Funciona bien con Eclipe 3.2, 3.3, 3.5 – Galileo.

No fue probado en otro ambiente de desarrollo como NetBeans, si tienen experiencia en su uso en dicha herramienta les agradecería sus comentarios.

Base de datos con el cual funciona.

Si bien la librería ControladorBD sólo fue probado con éxito con MySQL y PostGreSQL debería funcionar también con todas las demás Bases de Datos que trabajan con JDBC, por ej. SQLServer/Oracle/Ingres/Progress, ya que dentro del ControladorBD, no se insertan comandos especificos JDBC de ninguna Base de Datos, es decir, dichas librerias JDBCs deben ser vinculadas de forma independiente al proyecto.

Para hacer funcionar el ControladorBD con otra Base de Datos, basta con cambiar el valor de driver, en el archivo controlador-bd.properties, indicando la clase JDBC loader de la base de datos especifica que se desea utilizar.

Métodos públicos que contiene la API

La API cuenta con algunas métodos estáticos que pueden ser utilizados directamente (no necesitan de conexion previa) y que apoyan al rápido desarrollo de aplicaciones de parte del programador, éstas son:

Métodos para ejecución de comandos.

Los siguientes métodos son utilizados para ejecución de comandos SQL en la Base de Datos.

Nombre de la Funcion Descripción Parámetros y Retorno
addSQL
Agrega un comando SQL a la cola de ejecución de comandos, pero no la ejecuta hasta que se llame el método ControladorBD.execute()
  • String comandoSQL : el comando SQL a ser almacenado en la Cola.
execute
Ejecuta el/los comando/s SQL que se encuentra/n en la cola, directamente en el servidor.Los comandos SQL deben agregados a la Cola llamando a ControladorBD.addSQL(comandoSQL)Este método antes de ejecutar los comandos que se encuentran en la cola, abre una nueva transacción, y la cierra despues de haber ejecutado todos los comandos. Sin parámetros

Métodos útiles que recuperan información

Estos métodos pueden ser llamados directamente y en cualquier momento para recuperar cierto tipo de información de la base de datos, sin la necesidad de tener que escribir el comando SQL específico para ello, gracias a que el mismo método lo hace por nosotros.

Nombre de la Funcion Descripción Parámetros y Retorno
maximoValorCampo
Recupera el máximo valor de una columna del tipo Numérico de una Tabla.Equivale a ejecutar la función SELECT MAX del SQL.
Parámetros:
  • String tabla: nombre de la tabla de la cual se desea recuperar la información.
  • String campo: nombre del campo de la tabla de la cual se desea obtener el valor máximo.
buscarCampo
Busca el valor de un campo en la base de datos, teniendo en cuenta un filtro de busqueda que se puede validar sobre otro campo también pasado como parámetros.Esta función solamente puede retornar el valor o los valores de una única columna de una tabla.Caso exístan más de un resultado en la columna, sólo se muestra el primero, y es muy útil en el caso que desee por ejemplo recuperar la descripción de una ciudad, pasandole como parámetro el código de la ciudad.
Parámetros
  • String tabla: nombre de la tabla que contiene el campo que se desea buscar y recuperar.
  • String campoBusqueda: nombre del campo que se utilizará como parametro de busqueda, es decir en la condición del filtro.
  • String valor: valor que se aplicará al filtro, junto con el parámetro anterior, (se formará WHERE campoBusqueda=valor en la instrucción SELECT)
  • String campoRecuperar: nombre del campo de la tabla cuyo valor se está queriendo recuperar.
contadorTabla
Cuenta la cantidad de registros que posee una tabla determinada.Equivale a ejecutar la función SELECT COUNT del SQL.
Parámetros:
  • String tabla: nombre de la tabla sobre la cual desea obtener el conteo.
  • String campo: nombre del campo de la tabla de la cual desea aplicar la función COUNT.

Métodos utilizados para recuperar Columnas (Campos) de la Base de Datos

Estos métodos deben ser utilizados luego de una ejecución de Consulta SELECT-SQL en la Base de datos, para recuperar los valores de los campos resultantes de la ejecución del comando.

Nombre de la Funcion Descripción Parámetros y Retorno
finRecordSet
Método que verifica si aún existen registros a ser leidos luego de una instrucción SELECT-SQLCaso aún existan registros a ser leidos, éste método salta al siguiente RecordSet, y la función devuelve true.Puede ser utilizado dentro de un IF, si sabe que la consulta SELECT-SQL pudo haber recuperado un solo registro,if (ControladorBD.findRecordSet()){leer registro recuperado……}También puede ser utilizado dentro de un ciclo, si sabe que la consulta pudo haber recuperado más de un sólo registro, por ej. con el while, quedaría así:while(ControladorBD.findRecordSet()){leer registro recuperado……} No posee parámetros.Retornosboolean true: Si aun existen registros a leer, y salta a la siguiente posicion del recordSet.boolean false: Si ya no existen registros a ser leidos.
getInt
Recupera el valor del campo de tipo Numerico Entero del recordSet actualmente posicionado con findRecordSet.Esta función solamente puede ser utilizado dentro de una llamada al finRecordSet() sea con un if o con un while.
Parámetros:
  • String campo: nombre del campo de la tabla que se desea recuperar, debe coincidir con con los nombres pasados a la instrucción SELECT-SQL.
getString
Recupera el valor del campo de tipo Alfanumérico del recordSet actualmente posicionado con findRecordSet.Esta función solamente puede ser utilizado dentro de una llamada al finRecordSet() sea con un if o con un while.
Parámetros:
  • String campo: nombre del campo de la tabla que se desea recuperar, debe coincidir con con los nombres pasados a la instrucción SELECT-SQL.
getFloat
Recupera el valor del campo de tipo Numerico Flotante (decimal) del recordSet actualmente posicionado con findRecordSet.Esta función solamente puede ser utilizado dentro de una llamada al finRecordSet() sea con un if o con un while.
Parámetros:
  • String campo: nombre del campo de la tabla que se desea recuperar, debe coincidir con con los nombres pasados a la instrucción SELECT-SQL.
getDate
Recupera el valor del campo de tipo Fecha del recordSet actualmente posicionado con findRecordSet.Esta función solamente puede ser utilizado dentro de una llamada al finRecordSet() sea con un if o con un while.
Parámetros:
  • String campo: nombre del campo de la tabla que se desea recuperar, debe coincidir con con los nombres pasados a la instrucción SELECT-SQL.

Version Vigente.

1.3 (Diciembre 2010)

Descarga (Download)

Bajar el archivo comprimido controlador-bd-1.3.jar

En el siguiente artículo, veremos cómo utilizar ésta API.

Conclusión

En los artículos anteriores te mencioné que quiero volverte un experto en el Desarrollo rápido de Aplicaciones en Java, y que hagas todo lo que yo te pida para que ésto se pueda cumplir en tí gracias a la aplicación de éste tutorial.

Es por eso que ahora te pido que imprimas éste artículo y lo agregues a las demás hojas que te pedí que imprimas, no desperdiciarás hojas ya que éste articulo lo utilizarás bastante para saber que métodos de la API ControladorBD utilizar y en que momento, te lo aseguro, programarás más rápido si tienes acceso inmediato a estos materiales cuando lo necesitas.

Te animo a que dejes tus comentarios o me muestres tus trabajos, en el caso de que hayas bajado la libreria ControladorBD y haya sido util para tu proyecto.

Marcos Jara

Esta entrada fue publicada en Uncategorized y etiquetada , , , , , , , , , . Guarda el enlace permanente.

61 respuestas a Tutorial-Java, API que Ahorra el Tiempo de Desarrollo

  1. william dijo:

    Gracias, como siempre muy buen material..

    Saludos,
    William

  2. Tavo Leyva dijo:

    Excelente aporte, sé cual es el tiempo que se ahorra al tener una herramienta como la tuya, no se por qué no se me había ocurrido desarrollar una librería para java, utilizo algo parecido en C#.

    Podrías publicar el código que contiene la librería .JAR para saber y estudiar la forma en que hacen las llamadas a los métodos.

  3. Fede dijo:

    Marcos excelente los tutoriales, son de mucha ayuda para personas como yo que recien estamos empezando con esto.
    No pude descargar el controladorBD, si me lo podes pasar por mail para poder seguir los tutoriales te agradeceria.

    Saludos, Fede.

    • Marcos Jara dijo:

      Hola Fede

      Esa es justamente la idea, ayudarte y principalmente si estas comenzando…

      El link esta funcionando ahora!, pruebalo de vuelta y me avisas

      Saludos.

      PD:
      A todos los que tuvieron problemas para descargar ultimamente el controlador-bd, les pido mil disculpas. Eso se debió a un problema que tuve con la empresa de hosting y que por fin ahora está solucionado debido a que lo levanté en Google Code.

  4. Freyder dijo:

    Saludos, te cuento que estoy siguiendo este tutorial pero te cuento que el vinculo de descarga del API controlador-bd-1.3.jar se encuentra roto ya que no esta cargando. no se si me puedas colaborar con ese jar o enviarmelo por correo para analizarlo y seguir tu metodologia.

    saludos

    • Marcos Jara dijo:

      Hola Freyder.

      El link esta funcionando ahora!, pruebalo de vuelta y me avisas

      Saludos.

      PD:
      A todos los que tuvieron problemas para descargar ultimamente el controlador-bd, les pido mil disculpas. Eso se debió a un problema que tuve con la empresa de hosting y que por fin ahora está solucionado debido a que lo levanté en Google Code.

  5. Denis dijo:

    Buenisimo.. Gracias !

  6. Lorenzo dijo:

    El link de controlador-bd-1.3.jar esta caido, se podra subir nuevamente?

    SALUDOS

    • Marcos Jara dijo:

      Hola Lorenzo.

      El link esta funcionando ahora!, pruebalo de vuelta y me avisas

      Saludos.

      PD:
      A todos los que tuvieron problemas para descargar ultimamente el controlador-bd, les pido mil disculpas. Eso se debió a un problema que tuve con la empresa de hosting y que por fin ahora está solucionado debido a que lo levanté en Google Code.

  7. genesis hernandez dijo:

    hola…!!!! estoy leyendo tu blog y me parece muy intezante este tutorial…pos tengo que hacer una base de dato para biblioteca ok conoco se como trabajar con el servidor de base de dato MySQL que mencionas..pero lo estas relacionando con epclise por la parte del codigo… conosco mejor a netbeast. mi pregunta es si ¿se hacer la parte del codigo en netbeast es lo mismo que en epclice?

    • Marcos Jara dijo:

      Se puede utilizar NetBeans sin problemas, si conoces mejor, pues úsalo.

      La API controlador BD contiene sólo clases Java, conceptualmente el editor de código, sea éste Eclispe, NetBeans o NN no tiene por que interferir en el funcionamiento, por eso es que podemos utilizar también la API de interfaz gráfica Swing en cualquiera de los dos.

      La única diferencia es que como yo muestro todos los ejemplos en Eclipse, entonces con ese editor te resultará más rápido y fácil, pero dá igual usar uno u otro.

      Saludos.

  8. Jamil Enriquez dijo:

    Como se añade en netbeans?

    Felicidades grandes tus aportes

  9. alexdrovol dijo:

    Hola que tal tengo una superduda dices que Utilizas eldriver JDBC para utilizar tu libreria pero como se instala el driver de JDBC en Windows 7 una vez encontre un instalador pero ahora ya no lo encuentro me podrias indicar como es el proceso de instalacion del JDBC en Windows 7

  10. benni dijo:

    Hola Marcos,

    excelente aporte, como diríamos por aca, que maestro!! salio todo perfecto.
    gracias,

    benni

  11. Ivan Grandi dijo:

    Buenas, la verdad que el controlador que diseñaste esta buenísimo.

    Pero le encontré un bug. Voy a ver si llego a solucionarlo te mando la respuesta. Pero el bug consiste en lo siguiente.

    Te conectas a una BD normalmente, supongamos que compartís la BD con otro programa que modifica a esta misma, bueno siempre y cuando no ayas usado un INSERT o UPDATE vas a poder ver los cambios que realizo el otro programa, pero al primer INSERT que usas, es como que se “cuelga”, y deja de ver cambios que reilases desde otro lado😐.

    Es muy raro el problema pero estoy haciendo una aplicación con múltiples conecciones y al principio no entendía porque pasaba, pensaba que era problema mio pero al final me di cuenta del siguiente bug.

    Bueno el comentario fue para corregirlo no para discriminar😛.

    Hasta luego

    • Ivan Grandi dijo:

      Bueno me respondo solo porque pude solucionar el problema.

      Te quedaba el autocomit desactivado después de cualquier modificación y eso generaba el problema.

      Es tan facil como agregar.

      conexionMatriz.database.getConnection().setAutoCommit(true);

      Despues de

      if (conexionMatriz.isActualizacion()){

      Que es donde se fija si es una actualización, y por las dudas también ahí que ponerlo en el catch por si justo se lanzo una excepción.

      Bueno te pude ayudar a depurar un bug del controlador =).

      Saludos

      • Ivan Grandi dijo:

        Todo esto dentro de la clase ControladorBD, que esta en el controlador obvio😛

  12. Rex dijo:

    Hola Marcos.
    Bueno ante todo gracias por seguir subiendo los tutoriales, y bueno mi pregunta concreta es que quiero conectarme a un BD Progress(OpenEdge 10.1b) pero no puedo, bueno pongo todos los datos en el controlador-bd.properties pero no conecta, aqui el detalle:

    # Comunicacion con Progress
    url=jdbc:datadirect:openedge://host:puerto;databaseName=bdname
    usuario=user
    password=pwd
    driver=com.progress.sql.jdbc.JdbcProgressDriver

    error:
    Exception in thread “main” java.lang.ClassNotFoundException: com.progress.sql.jdbc.JdbcProgressDriver
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.tutorialjava.bd.DatabaseODBC.conectar(DatabaseODBC.java:24)
    at com.tutorialjava.bd.ControladorBD.getInstance(ControladorBD.java:43)
    at com.tutorialjava.bd.ControladorBD.addSql(ControladorBD.java:212)
    at com.teste.ControladorBDTeste.main(ControladorBDTeste.java:8)

    Cual crees que sea el problema???, que estoy haciendo mal???, muchas gracias,

    saludos,

  13. Rex dijo:

    Hola Marcos.

    Bueno respondiéndome ya pude solucionar mi problema con el progress, tenia mal los datos de los parámetros =) y ahora funciona!!!, igual gracias por todo, saludos.

  14. Alejandro Sandoval dijo:

    Que tal Marcos?
    Excelente el material, pero el para descargar mysql-connector-java-3.1.10-bin

  15. ing yonaides dijo:

    Excelente !!!
    estoy buscando un articulo que me ayude a crear mi propios componentes por ejemplo un textField y no encuentro nada quizas pueden ayudarme!!
    muchas gracias!!

  16. Michael dijo:

    Hola, recien estoy incursionando en el mundo de java y tambien la primera que veo tus tutoriales, la cual estan buenas, quiziera saber como usar esta API en netbeans, agradeceria tu ayuda.

  17. pacios4 dijo:

    Buenos dias Marcos, he empezado a sumergirme en el mundo de la programación, soy muy inexperto en esta materia y este tuturial me ha parecido muy interesante. Estoy siguiendo el tutorial y la verdad es que no he comprendido muy bien como se instala el “controladorBD” en la sección “Preparando el Ambiente y las Herramientas necesarias”, apartado 4.”API que ahorra el tiempo de desarrollo” y al llegar al apartado 1. “creando el test de conexion#1” de la sección “Probando la Conexión con la Base de Datos” el atasco a sido mayor. Me gustaria que me lo explicaras paso a paso para entenderlo mejor. Me descargue los dos archivos, pero lo de meterlo en la carpeta lib de el proyecto no lo entiendo porque todavia no tengo ningun proyecto, aun asi puedo crear una carpeta en el futuro proyecto que se llame lib y luego copiar el controladorBD, lo siguiente es lo de agregar el camino del archivo al classpath, ahi ya no tengo ni idea de como se hace eso, necesitaria algo mas grafico para poder ubicarme. Le agradezco mucho el trabajo que esta haciendo. Un saludo.

    • Marcos Jara dijo:

      Hola

      Es que este tutorial no esta preparado para personas que no entienden aún programación, se trata de una guia para el desarrollo de aplicaciones en Java Swing, para no complicarte demasiado te recomiendo empezar con un tutorial más básico como por ejemplo programación orientada a objetos y fundamentos del lenguaje java, sino te va ser todo muy complicado.

      Saludos.

      • pacios4 dijo:

        Gracias por tu consejo auque seguire por aqui, me descargué un manual de java, lo que no se es si estara muy anticuado porque es del año 2000. Tiene los conceptos básicos para entender el leguaje y el funcionamiento de java y lo estoy mirando. Aun asi quiero estar practicando y sus tutoriales me parecen de facil comprensión en relación a mis conocimientos, porque todo lo que he visto por ahi es como si hablaran en chino. Gracias por todo y mañana nos veremos por aqui otra vez. Hasta mañana Marcos.

  18. hola marcos, gracias por el controlador me ha ayudado mucho.
    tienes un método o como puedo hacer para vaciar la cola addSql?
    Estoy insertando filas de un jtable a la bd, y en la manera como lo estoy programando necesito vaciar la cola si tengo un error en alguna fila, ya que si no me agregaría las filas buenas a la cola tantas veces como le de al botón enviar.

    Gracias de antemano.

    • ya lo resolvi, añadiendo este metodo dentro de controladorBD,
      public static void removeSql(){
      try{
      conexionMatriz.comandosSQL.clear(); // Limpia el ArrayList, vacia el addSql
      }catch (Exception e){
      }
      }

      • Marcos Jara dijo:

        Estimado Freilin

        Como estás? me alegra que hayas investigado y profundizado más el asunto del ControladorBD.

        Pero quisiera mencionarte que tu no necesitas preocuparte por limpiar lo que que se queda almacenado en el buffer de ejecución, ya que la propia librería se encarga de eso.

        Cada vez que ejecutas un ..execute() el limpia todos los comandos, no importando si se ejecutó con éxito o no una transacción.

        Si tu tuviste algún problema con eso, por favor escribíme tu código para ver como lo estás utilizando, puede ser que no estes implementando de la manera correcta.

        Saludos.

    • Marcos Jara dijo:

      Hola

      como te dije, enviame la manera como estás intentando hacerlo, no necesitas borrar nada del controlador, a menos que no lo estés implementando de la manera correcta.
      Saludos

      • tienes razón no hay ningún problema, lo que paso fue que mientras añadía sentencias sql para insertar en la bd, por otra lado tenia una función que añadía y ejecutaba sentencias sql para llenar un jcombobox con valores de la bd en el jtable, y esto hacia que se insertara la sentencia anterior.
        la solución fue crear un arraylist axuliar par las sentencias de inserción y despues de todas las comprobaciones asignar este arraylist al del controlador.

        voy a tratar que el controlador trabaje con un arraylist de arraylist para poder ir añadiendo sentencias a diferentes colas e ir ejecutandolas independientemente y asi tener mayor flexibilidad y control. no se si me explique bien.

        saludos.

  19. cristhiam dijo:

    El conector mysql-connector-java-3.1.10-bin tiene problemas para bajarlo, por fa digame desde donde lo puedo descargar, lo necesito para seguir con el curso…. gracias.

  20. cristhiam dijo:

    o si me lo puede enviar el conector a mi correo…. crisvillota1983@hotmail.com

  21. CECILIA dijo:

    Hola Marcos:

    me encanta, que hayas hecho este tutorial, mil gracias por tua aportaciones, soy más o menos nueva, ya hice una conexión a la BD con el conector, lo único que no me queda claro para segui r con tu ejemplo es la creación del archivo del paso 2, te refieres a una nueva clase?, ypo lo hice así: Connection unaConexion = DriverManager.getConnection (“jdbc:mysql://localhost:3306/bdlogin”,”root”, “Jetaime2011”);

    • Marcos Jara dijo:

      Hola

      No eso no debes programar,

      Solamente debes utilizar los comandos directamente desde el controlador, por ejemplo:

      ControladorBD.add(…
      ControladorBD.execute(…

      Es directo..

      Saludos

  22. Diego M dijo:

    Hola Marcos, excelente articulo y de gran ayuda. Tengo un problemilla, estoy intentado conectarme a una base de datos progress y he descargado el jdbc de la pagina de datadirect. Cuando lanzo la ejecucion simple de conexion me sale este fallo:

    Exception in thread “main” java.sql.SQLException: [DataDirect][OpenEdge JDBC Driver][OpenEdge] Failed to get the SQL client’s character set name, no information supplied !
    at com.ddtek.jdbc.openedge.client.ddd.av(Unknown Source)
    at com.ddtek.jdbc.openedge.client.ddd.j(Unknown Source)
    at com.ddtek.jdbc.openedge.OpenEdgeImplConnection.i(Unknown Source)
    at com.ddtek.jdbc.openedgebase.BaseConnection.b(Unknown Source)
    at com.ddtek.jdbc.openedgebase.BaseConnection.k(Unknown Source)
    at com.ddtek.jdbc.openedgebase.BaseConnection.a(Unknown Source)
    at com.ddtek.jdbc.openedgebase.BaseConnection.a(Unknown Source)
    at com.ddtek.jdbc.openedgebase.BaseDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at telematel.main(telematel.java:9)

    No logro encontrar el problema. Ruego vuestra ayuda.
    Muchas gracias

    • Marcos Jara dijo:

      Hola Diego,

      Y como estas haciendo en tu archivo .properties para los datos de la conexion?

      • Diego M dijo:

        Hola Marcos, gracias por contestar. La conexion la hago de la siguiente forma:
        import java.sql.Connection;
        import java.sql.DriverManager;
        import java.sql.ResultSet;
        import java.sql.Statement;

        public class telematel {
        public static void main(String[] args) throws Exception {
        Class.forName(“com.ddtek.jdbc.openedge.OpenEdgeDriver”);
        Connection conn = DriverManager.getConnection(
        “jdbc:datadirect:openedge://192.168.1.5:2524;databaseName=tlmbd-d;Database=PUB;User=sysprogress;Password=249131”);
        conn.setAutoCommit(false);
        Statement stmt = conn.createStatement();
        ResultSet rset = stmt.executeQuery(“SELECT num_fab FROM pub.tl_marcas”);
        while (rset.next()) {
        System.out.println(rset.getString(1));
        }
        stmt.close();
        }
        }

        Gracias por tu ayuda.

  23. saul dijo:

    El enlace al conector mysql-connector-java-3.1.10-bin no funciona, podrias revisarlo o mandarme el archivo a mi correo por favor.
    Gracias.

  24. Leonardo dijo:

    Hola Marcos, estoy practicando con la API, y me surge una duda al utilizar la función: buscarCampo.

    Por ejemplo:
    int ciudadcodigo = 4;
    ControladorBD.buscarCampo(“ciudades”, “ciu_codigo”, ciudadcodigo, “ciu_descripcion”);

    esto en tu ejemplo obtendrá “Caracas” si no me equivoco, hasta ahi todo bien, quiero saber donde queda ese valor, como hago para comparar lo que me devolvio “Caracas” con por ejemplo el contenido de una variable llamada ciudad ??

    Gracias por tu ayuda.
    Saludos.

    • Marcos Jara dijo:

      Hola Leonardo,

      Arroja el resultado del método buscarCampo… en una variable o atributo del tipo Object, así:

      Object result = ControladorBD.buscarCampo(“ciudades”, “ciu_codigo”, ciudadcodigo, “ciu_descripcion”);

      Luego haz un cast, para convertirlo en lo que deseas:

      String descri = (String) result;
      System.out.println(“La descripcion es ” + descri);

      Exitos.

  25. Alejandro dijo:

    Hola Marcos excelente aporte..

    Queria saber si el ControladorBD tiene un comando para cerrar la transaccion.
    algo como el close() que tiene el driver manager?

    • Marcos Jara dijo:

      Hola,

      La conexion se cierra de forma automatica cuando el controlador se destruye, pero tambien puedes cerrarla de manera manual, recuperando la conexion del controlador e invocando al metodo close();

  26. RoydCapella dijo:

    Excelente aporte amigo! sigo entusiasmado tu majestuoso tutorial! =) Graciaas por dedicar tu tiempo para transmitir tus conocimientos!

  27. Leonardo dijo:

    Hola Marcos, quería consultarte si la API soporta “preparedStatement()” y de ser así, como se habilita ? si es agregando el parámetro “?useServerPrepStmts=true” o cual otro ?
    Saludos.

  28. Jzstice dijo:

    hoola la verdadmuy bueno tu tutorial, para utilizar esta API con oracle express cual es el driver

  29. Diego dijo:

    pues a mi el controlador -bd me da error
    Exception in thread “main” java.lang.UnsupportedClassVersionError: Bad version number in .class file
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at com.teste.Conexion.main(Conexion.java:14)

  30. jagil73 dijo:

    Muy buenas, saludos desde España.

    Antes que nada felicitarte por el gran trabajo, nos sirve de gran ayuda a muchos.

    Quiero comentarte mi problema a ver si hay alguna solución posible. Estoy haciendo pruebas con la clase ControladorBD y me encuentro un problema cuanto quiero ejecutar dos consultas simultáneamente (la segunda dentro del bucle de lectura de la primera), algo así:

    string sql = “select * from loquesea”;
    ControladorBD.addSql(sql);
    ControladorBd.execute;
    while (ControladorBD.finrecordset()) {

    … bla, bla, bla, …
    string sql = “select * from otratabla”;
    ControladorBD.addSql(sql);
    ControladorBd.execute;
    …bla, bla, bla…
    }

    Cuando se ejecuta el segundo execute pierdo la primera consulta

    Creí que lo podría solucionar instanciando ControladorBD en un objeto, algo así:

    string sql = “select * from loquesea”;
    ControladorBD cbd = new ControladorBD();
    cbd.addSql(sql);
    cbd.execute;
    while (cbd.finrecordset()) {

    … bla, bla, bla, …
    string sql = “select * from otratabla”;
    ControladorBD.addSql(sql);
    ControladorBd.execute;
    …bla, bla, bla…
    }

    Pero no puedo por que me dice que el constructor de ControladorBD no es visible.

    ¿alguna sugerencia?

    Muchas gracias

    • Marcos Jara dijo:

      Hola

      Para solucionar tu inconveniente debes de copiar todo el resultado de tu consulta a una lista de listas, sets, mapas o arrays,

      Te muestro un ejemplo con array de mapas

      string sql = “select * from loquesea”;
      ControladorBD.addSql(sql);
      ControladorBd.execute;

      Map[] mapa = new HashMap[cantidad de registros recuperados];
      int contadorReg = 0;
      while (ControladorBD.finrecordset()) {
      copiar todo lo que está en ControladorBd al Mapa
      por cada uno, hacer
      mapa[contadorReg] = new HashMap();
      mapa[contadorReg].put(‘campoA’, ControladorBD.getInt(‘campoA’));
      mapa[contadorReg].put(‘campoB’, ControladorBD.getInt(‘campoB’)); //puedes usar getInt, getString, getDate, dependiendo del campo

      mapa[contadorReg].put(‘campoZ’, ControladorBD.getInt(‘campoZ’));
      contadorReg ++;
      }
      Con ésto logras separar los datos recuperados de tu controladorBD, ahora todos los datos recuperados los tienes en ese array de mapas
      y puedes ejecutar tranquilamente tu segunda llamada, dentro de otro ciclo while, consultando ya ahora el mapa directamente.
      —————————————————-

      Map[] mapa = new HashMap[cantidad de registros recuperados];
      int contadorReg = 0;
      while (contadorReg < mapa.length) {
      Map mapaREgistro = mapa[contadorReg]; //obtienes el registro
      //para obtener cada campo del registro, obtienes con get y el nombre del campo A, B o Z que utilizaste al insertar, por ejemplo
      int campoA = mapaRegistro.get('campoA');

      //Haces tu otro SQL normalmente.
      … bla, bla, bla, …
      str ing sql = “select * from otratabla”;
      ControladorBD.addSql(sql);
      …bla, bla, bla…
      contadorReg++;
      }
      ControladorBd.execute;

      Nota que el execute lo retiré de dentro del ciclo, no hace falta hacer un execute por cada add, puedes agregar infinitos comandos y ejecutarlos todos una única vez.

      Espero te sirva

      Saludos.

      • jagil73 dijo:

        Gracias Marcos, por tu rápida respuesta.

        Me parece bien la solución que planteas. La voy a probar.

        Por otro lado, y ya por curiosidad, ¿por qué no se puede instanciar esa clase? ¿qué características tiene que hace que no pueda crear un objeto como en una clase “normal”?

        De nuevo, muchas gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s