Oracle e Java – Como gerar um QR CODE? Loadjava e Java compilado!

Faaaaaaala galera!!

Depois de muito tempo sem postar nada, estou eu aqui mais uma vez e, dessa vez, com uma vídeo aula diferente. Não estou consertando nada, mas sim, mostrando como construir algo, dentro do Oracle.

Vamos construir um gerador de QRCODE!!!! Legal né?

open_mind

E isso nem é o mais legal dessa história. O mais legal não é o resultado final, que é o nosso gerador de QRCODE, mas sim os caminhos para chegarmos até lá.

Por que digo isso? Por que vamos aprender um bom bocado com isso. Para gerar um simples gerador de QRCODE dentro do Oracle, utilizamos muitos recursos nem tão comuns, e nem tão utilizados por desenvolvedores Oracle em geral.

Estou falando de carregar Java para dentro do Banco de dados Oracle. E não só isso. Estou falando também em criar classes diretamente dentro de um banco de dados Oracle. E depois chamar essas classes através do nosso velho amigo, PL/SQL.

Parece divertido, não é mesmo?

Pois é, pesquisei muito na internet em busca de informações claras sobre como utilizar o loadjava, um utilitário (shell) da oracle que faz a carga de classes java (jar) para o banco de dados. Muito difícil de achar algo realmente compreensível. Quanto ao java compilado é mais fácil, mas mesmo assim, tem muitos detalhes difíceis de entender.

Pena que não tive tempo de escrever todo o código junto com vocês, ou o vídeo viraria uma novela com vários e intermináveis capítulos (exagerado hein), mas mesmo assim, mostro exatamente como pode ser desenvolvido tudinho.

Vou deixar também um exemplo de como utilizar esse gerador de QRCode com Oracle Reports, não sei se muita gente ainda usa, mas vale o exemplo.

Então vamos lá, prepara a pipoca pois o vídeo é meio longo, e chato, mas vale muito a pena!!

Se curtiu, achou útil, gostou, achou interessante, mais ou menos, não achou nada, ou sei lá o que você achou, ficarei feliz se você clicar em compartilhar e também clicar em curtir.  😀

Vamos ao vídeo:

Os códigos que utilizei eu posso enviar por e-mail para quem quiser, para isso, basta compartilhar esse post e colocar seu comentário aí em baixo pedindo os fontes, mas claro informando seu e-mail também.
Para facilitar, resolvi colocar os fontes no github. Assim fica mais fácil para galera que deseja utilizar e entender o projeto bem como, caso alguém queira colaborar com alguma melhoria seria muito legal!

Link do projeto no github: https://github.com/genilto/qr-code-oracle

Grande abraço galera!
Espero muito poder ter ajudado vocês!

90 comentários em “Oracle e Java – Como gerar um QR CODE? Loadjava e Java compilado!

  1. Mauricio Roberto Maciel Responder

    Olá Boa noite! Gostaria do envio dos seus fontes. Preciso exatamente da sua solução!

  2. Glauber Moisés Garcia Responder

    Genilto,

    parabéns pelo vídeo !!! Sensacional !!! Poderia me enviar esses arquivos para que eu teste aqui ? Desde já agradeço.

  3. Edmilson Felber Responder

    Boa tarde,
    Muito legal o seu post,
    Preciso gerar Qrcode no oracle e é exatamente o que eu estava procurando. Poderia enviar os fontes para eu realizar alguns testes?
    Aguardo.
    Abraço.

      • Edmilson Felber Responder

        Muito Obrigado.
        Testei aqui e deu certo, era exatamente o que estávamos precisando.
        Agora conseguimos imprimir QRcode no reports 6i.

      • Edilberto Responder

        Olá Genilto, estou realizando um trabalho de conclusão de curso de técnico de informática, estou tentando fazer um controle de alunos em Java com Qr, será que seria possível vc enviar o código desse trabalho seu por favor
        Desde já agradeço

  4. Marcio Costa Responder

    Olá Genilto, bom dia.
    Muito bom seu trabalho e sua vídeo aula foi sensacional. A utilização de QRCode no Oracle veio caiu como uma luva para um trabalho que estou realizando.
    Portanto, gostaria se possível, receber os fontes e/ou o pacote JAR utilizado na vídeo aula.

    Desde já lhe agradeço e mais uma vez, parabéns pelo trabalho.

    Att.
    Márcio Costa

  5. Marcio Costa Responder

    Olá Genilto, bom dia.
    Muito bom seu trabalho e sua vídeo aula foi sensacional. A utilização de QRCode no Oracle veio caiu como uma luva para um trabalho que estou realizando.
    Portanto, gostaria se possível, receber os fontes e/ou o pacote JAR utilizado na vídeo aula.

    Desde já lhe agradeço e mais uma vez, parabéns pelo trabalho.

    Att.
    Márcio Costa

  6. Miguel Banderas Ramirez Responder

    Oi, o video de como fazer o codigo QR é muito legal. Tenho um problema no momento de fazer o loadjava, não reconhece, aparece uma mensagem dizendo:

    “ORA-00942: table or view does not exist”

    mas eu vi que você não teve problema com isso, e com o que eu tenho problema é com esta mensagem:

    Error while granting execute on META-INF/MANIFEST.MF to APPS
    ORA-01749: you may not GRANT/REVOKE privileges to/from yourself”
    que repete-se varias vezes

    Que tipo de usario você utiliza pra executar? O so o sqlplus??
    muito obrigado

    • Genilto Vanzin Autor do postResponder

      Olá Miguel.

      O erro “ORA-00942: table or view does not exist” pode acontecer caso você não crie a tabela tbl_qrcode_image. Você chegou a criá-la?

      Referente aos outros erros, em que momento eles acontecem? Imagino que seja no momento que você executa o loadjava, certo?
      Se analisarmos o comando, ele possui o grant para o usuário APPS, veja abaixo:

      loadjava -verbose -synonym -resolve -user user/pass@base -grant APPS -fileout log.txt com.genilto.qrcode.jar

      Eu utilizo o usuário APPS para fazer todos os procedimentos mostrados no vídeo.

      Grande abraço!

      • Miguel Banderas Ramirez Responder

        El error de que la tabla no existe, vi que te salió tambien a ti, la tabla tbl_qrcode_image si la tengo creada y bajo el esquema APPS.

        Los demás errores me aparecen en el archivo LOG, despues que termina de hacer el loadjava, pero no es solo con el MANIFEST (que es el error que pongo) sino tambien con mas archivos, unos ejemplos mas:
        synonym : com/google/zxing/qrcode/decoder/Version$ECB
        granting : execute on class com/google/zxing/qrcode/decoder/Version$ECBlocks to APPS
        Error while granting execute on com/google/zxing/qrcode/decoder/Version$ECBlocks to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/decoder/Version$ECBlocks
        granting : execute on class com/google/zxing/qrcode/decoder/Version to APPS
        Error while granting execute on com/google/zxing/qrcode/decoder/Version to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/decoder/Version
        granting : execute on class com/google/zxing/qrcode/detector/AlignmentPattern to APPS
        Error while granting execute on com/google/zxing/qrcode/detector/AlignmentPattern to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/detector/AlignmentPattern
        granting : execute on class com/google/zxing/qrcode/detector/AlignmentPatternFinder to APPS
        Error while granting execute on com/google/zxing/qrcode/detector/AlignmentPatternFinder to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/detector/AlignmentPatternFinder
        granting : execute on class com/google/zxing/qrcode/detector/Detector to APPS
        Error while granting execute on com/google/zxing/qrcode/detector/Detector to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        son muchos mas los que aparecen.
        Te preguntaba lo del usuario, si estabas solamente conectado a nivel sistema operativo (SO) y con qué tipo de usuario, si con un SYS, SYSADMIN.. con applmgr (no se si lo manejes), o si tenías alguna sesión de sqlPlus iniciada o si ya habias iniciado la conexion con el APPS y dentro de sí ejecutaste el comando.

        Muchas gracias, tuve ayuda de una amiga para poner el primero comentario, comprendo lo que me escribes sin embargo no no sé como escribirte yo, puedo intentarlo en ingles sino te importa o seguir con español.

        • Genilto Vanzin Autor do postResponder

          Olá.

          Sem problema, se você escrever em espanhol eu entendo bem. Mas vou escrever em português, se não tiver problemas. 😀
          A tabela pode ser criada sim abaixo do APPS, funcionou agora para você?

          Esses erros de grant, eu imagino que acontecem pois foi o próprio APPS quem criou e ele está tentando dar o grant para ele mesmo. Em teoria não precisa. Talvez se você tirar o grant do comando, os erros não aconteçam mais, conforme abaixo:

          loadjava -verbose -synonym -resolve -user user/pass@base -fileout log.txt com.genilto.qrcode.jar

          Para conectar no Putty (SSH) eu uso um usuário próprio mesmo, não sei te dizer quais as permissões que ele tem.
          Mas para conectar no banco de dados eu uso o APPS mesmo.

          Para os testes com banco de dados, para rodar os programas que foram criados, eu uso o PL/SQL developer, como está no vídeo.
          Não uso o SQLPLUS em nenhum momento.

          Abraço

          • Miguel Banderas Ramirez

            Sin problema, puedes seguir en portugués. 🙂
            Ya quité los grants hacia APPS, lo intenté y cargó el java sin error.
            ahora tengo problema con otro asunto ¬_¬” ejecuto el bloque anónimo desde Toad, y me arroja:
            Error: ORA-29515: se ha llamado a una rutina desde el código Java con el estado 2
            Creo que algo estoy haciendo mal, pero no alcanzo a identificar qué es.
            Mis datos son correctos, sí me inserta en la tabla tbl_qrcode_image, aparece si id, la descripcion pero el BLOB se queda vacío.
            creo que algo con el java me está causando problemas, supongo la instancia.
            ————–
            (no habia mandado el mensaje)
            probé en otra instancia con mas configuraciones y sin quitar el grant a APPS y ya corrió bien, no me marcó ningun error ni el de la rutina java con estado 2..
            (o.O eso está raro)

            Muchas gracias por tu ayuda!! 😀
            mucho exito.

          • Genilto Vanzin Autor do post

            Me diz uma coisa, qual a versão do Oracle que você está tentando rodar isso?
            Eu estou rodando no Oracle 11g.
            Teve um caso em que um leitor do blog aqui estava testando no 10g, e não funcionou.
            Ele (Elton Granado), descobriu que o java usa umas fontes TTF, e como o servidor é linux, ele deu falta dessas fontes na hora de gerar o QRCode.
            Quando o Oracle 11g é instalado, ele já coloca na pasta de font algumas fontes a mais, e ai funciona, mas no 10g não tem essas fontes.

            Veja ai qual a versão do Oracle que você está usando.

          • Miguel Banderas Ramirez

            Hola, sin problemas, de hecho creo que hubiera comenzado por ahí desde un principio, la versión en donde pude instalar todo fue RDBMS: 11.2.0.3 y Oracle Applications 12.1.3 y la versión en la que falló fue RDBMS: 10.2.0.3 y Oracle Applications: 12.0.6, también cabe mencionar que la versión en la que no tuve éxito, tiene ip’s internas, me parece no tiene salida a Internet (creo que pudo haber afectado algo).

            Fuera de eso, en la 12.1.3 ya pude generar el codigo y salió todo con exito., no tuve que instalarle fuentes ni archivos TTF 😀

          • Genilto Vanzin Autor do post

            Ah que bom que funcionou!! Fico muito feliz em poder ter ajudado!!
            Boa sorte e sucesso aí! Pena que não funciona em todas as versões. 😀
            Abraço

  7. Miguel Banderas Ramirez Responder

    Oi, o video de como fazer o codigo QR é muito legal. Tenho um problema no momento de fazer o loadjava, não reconhece, aparece uma mensagem dizendo:

    “ORA-00942: table or view does not exist”

    mas eu vi que você não teve problema com isso, e com o que eu tenho problema é com esta mensagem:

    Error while granting execute on META-INF/MANIFEST.MF to APPS
    ORA-01749: you may not GRANT/REVOKE privileges to/from yourself”
    que repete-se varias vezes

    Que tipo de usario você utiliza pra executar? O so o sqlplus??
    muito obrigado

    • Genilto Vanzin Autor do postResponder

      Olá Miguel.

      O erro “ORA-00942: table or view does not exist” pode acontecer caso você não crie a tabela tbl_qrcode_image. Você chegou a criá-la?

      Referente aos outros erros, em que momento eles acontecem? Imagino que seja no momento que você executa o loadjava, certo?
      Se analisarmos o comando, ele possui o grant para o usuário APPS, veja abaixo:

      loadjava -verbose -synonym -resolve -user user/pass@base -grant APPS -fileout log.txt com.genilto.qrcode.jar

      Eu utilizo o usuário APPS para fazer todos os procedimentos mostrados no vídeo.

      Grande abraço!

      • Miguel Banderas Ramirez Responder

        El error de que la tabla no existe, vi que te salió tambien a ti, la tabla tbl_qrcode_image si la tengo creada y bajo el esquema APPS.

        Los demás errores me aparecen en el archivo LOG, despues que termina de hacer el loadjava, pero no es solo con el MANIFEST (que es el error que pongo) sino tambien con mas archivos, unos ejemplos mas:
        synonym : com/google/zxing/qrcode/decoder/Version$ECB
        granting : execute on class com/google/zxing/qrcode/decoder/Version$ECBlocks to APPS
        Error while granting execute on com/google/zxing/qrcode/decoder/Version$ECBlocks to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/decoder/Version$ECBlocks
        granting : execute on class com/google/zxing/qrcode/decoder/Version to APPS
        Error while granting execute on com/google/zxing/qrcode/decoder/Version to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/decoder/Version
        granting : execute on class com/google/zxing/qrcode/detector/AlignmentPattern to APPS
        Error while granting execute on com/google/zxing/qrcode/detector/AlignmentPattern to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/detector/AlignmentPattern
        granting : execute on class com/google/zxing/qrcode/detector/AlignmentPatternFinder to APPS
        Error while granting execute on com/google/zxing/qrcode/detector/AlignmentPatternFinder to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        synonym : com/google/zxing/qrcode/detector/AlignmentPatternFinder
        granting : execute on class com/google/zxing/qrcode/detector/Detector to APPS
        Error while granting execute on com/google/zxing/qrcode/detector/Detector to APPS
        ORA-01749: you may not GRANT/REVOKE privileges to/from yourself

        son muchos mas los que aparecen.
        Te preguntaba lo del usuario, si estabas solamente conectado a nivel sistema operativo (SO) y con qué tipo de usuario, si con un SYS, SYSADMIN.. con applmgr (no se si lo manejes), o si tenías alguna sesión de sqlPlus iniciada o si ya habias iniciado la conexion con el APPS y dentro de sí ejecutaste el comando.

        Muchas gracias, tuve ayuda de una amiga para poner el primero comentario, comprendo lo que me escribes sin embargo no no sé como escribirte yo, puedo intentarlo en ingles sino te importa o seguir con español.

        • Genilto Vanzin Autor do postResponder

          Olá.

          Sem problema, se você escrever em espanhol eu entendo bem. Mas vou escrever em português, se não tiver problemas. 😀
          A tabela pode ser criada sim abaixo do APPS, funcionou agora para você?

          Esses erros de grant, eu imagino que acontecem pois foi o próprio APPS quem criou e ele está tentando dar o grant para ele mesmo. Em teoria não precisa. Talvez se você tirar o grant do comando, os erros não aconteçam mais, conforme abaixo:

          loadjava -verbose -synonym -resolve -user user/pass@base -fileout log.txt com.genilto.qrcode.jar

          Para conectar no Putty (SSH) eu uso um usuário próprio mesmo, não sei te dizer quais as permissões que ele tem.
          Mas para conectar no banco de dados eu uso o APPS mesmo.

          Para os testes com banco de dados, para rodar os programas que foram criados, eu uso o PL/SQL developer, como está no vídeo.
          Não uso o SQLPLUS em nenhum momento.

          Abraço

          • Miguel Banderas Ramirez

            Sin problema, puedes seguir en portugués. 🙂
            Ya quité los grants hacia APPS, lo intenté y cargó el java sin error.
            ahora tengo problema con otro asunto ¬_¬” ejecuto el bloque anónimo desde Toad, y me arroja:
            Error: ORA-29515: se ha llamado a una rutina desde el código Java con el estado 2
            Creo que algo estoy haciendo mal, pero no alcanzo a identificar qué es.
            Mis datos son correctos, sí me inserta en la tabla tbl_qrcode_image, aparece si id, la descripcion pero el BLOB se queda vacío.
            creo que algo con el java me está causando problemas, supongo la instancia.
            ————–
            (no habia mandado el mensaje)
            probé en otra instancia con mas configuraciones y sin quitar el grant a APPS y ya corrió bien, no me marcó ningun error ni el de la rutina java con estado 2..
            (o.O eso está raro)

            Muchas gracias por tu ayuda!! 😀
            mucho exito.

          • Genilto Vanzin Autor do post

            Me diz uma coisa, qual a versão do Oracle que você está tentando rodar isso?
            Eu estou rodando no Oracle 11g.
            Teve um caso em que um leitor do blog aqui estava testando no 10g, e não funcionou.
            Ele (Elton Granado), descobriu que o java usa umas fontes TTF, e como o servidor é linux, ele deu falta dessas fontes na hora de gerar o QRCode.
            Quando o Oracle 11g é instalado, ele já coloca na pasta de font algumas fontes a mais, e ai funciona, mas no 10g não tem essas fontes.

            Veja ai qual a versão do Oracle que você está usando.

          • Miguel Banderas Ramirez

            Hola, sin problemas, de hecho creo que hubiera comenzado por ahí desde un principio, la versión en donde pude instalar todo fue RDBMS: 11.2.0.3 y Oracle Applications 12.1.3 y la versión en la que falló fue RDBMS: 10.2.0.3 y Oracle Applications: 12.0.6, también cabe mencionar que la versión en la que no tuve éxito, tiene ip’s internas, me parece no tiene salida a Internet (creo que pudo haber afectado algo).

            Fuera de eso, en la 12.1.3 ya pude generar el codigo y salió todo con exito., no tuve que instalarle fuentes ni archivos TTF 😀

          • Genilto Vanzin Autor do post

            Ah que bom que funcionou!! Fico muito feliz em poder ter ajudado!!
            Boa sorte e sucesso aí! Pena que não funciona em todas as versões. 😀
            Abraço

  8. Jaime Responder

    Genilto,
    Excelente tutorial. Bem direto no objetivo. Se possível gostaria do código-fonte para realizar alguns testes aqui

  9. Jaime Responder

    Genilto,
    Excelente tutorial. Bem direto no objetivo. Se possível gostaria do código-fonte para realizar alguns testes aqui

  10. Claudio Madeiras Responder

    Excelente exemplo. Tem como você enviar os fontes em Java para que eu possa testar na minha solução? Desde já eu ti agradeço.

  11. Claudio Madeiras Responder

    Excelente exemplo. Tem como você enviar os fontes em Java para que eu possa testar na minha solução? Desde já eu ti agradeço.

  12. Reinaldo Responder

    Tudo bem Genilto?

    Gostei do artigo. Muito bom!
    Realmente não encontramos citações detalhadas sobre o assunto.
    Se possível favor me enviar os código para que eu possa testar.
    Obrigado e um grande abraço.

  13. Reinaldo Responder

    Tudo bem Genilto?

    Gostei do artigo. Muito bom!
    Realmente não encontramos citações detalhadas sobre o assunto.
    Se possível favor me enviar os código para que eu possa testar.
    Obrigado e um grande abraço.

  14. João Paulo Lopes Responder

    Olá Genilto, primeiramente parabéns pelo post. Realmente a muito pouco material sobre isso na internet. Eu estou com um problema com meu GENERATE_QRCODE, ele está dando um erro,
    Note: Recompile with -Xlint:deprecation for details. Você tem ideia do que pode ser isso?
    Desde já agradeço sua atenção.

    • Genilto Vanzin Autor do postResponder

      Olá João!
      Desculpa pela demora, vi seu comentário só agora.
      Fiz o teste novamente aqui.
      01 – Carreguei o arquivo com.genilto.qrcode.jar com o loadjava. – OK
      02 – Criei a tabela 02.tabela_TB L_QRCODE_IMAGE.sql – OK
      03 – Compilei o 03.java_source_GENERATE_QRCODE.jsp – OK
      04 – Compilei a package 04.package_QRCODE_K.pck – OK

      Tudo certo aqui.

      Pelo erro que você me passou pode ser alguma diferença de versão do java. Faça o seguinte, vamos descobrir qual a versão do java que você está rodando dentro do banco, para isso:

      Crie uma função que retorna AS propriedades do JAVA do banco de dados.
      ——————
      CREATE OR REPLACE FUNCTION get_java_property(prop IN VARCHAR2)
      RETURN VARCHAR2 IS
      LANGUAGE JAVA name ‘java.lang.System.getProperty(java.lang.String) return java.lang.String’;
      ——————
      Depois rode o seguinte comando para obter a versão do JAVA:
      ——————
      SELECT get_java_property(‘java.version’) FROM dual;
      ——————

      No meu caso ele retornou: 1.5.0_10
      Logo, estou usando a versão 1.5 do Java.

      Faz aí e veja qual a versão. Se for diferente, o que eu estou achando que é, dá uma conferida no código da rotina 03.java_source_GENERATE_QRCODE.jsp e veja se tem alguma função que é utilizada lá, que está Deprecada na sua versão. Talvez seja isso.

      Qualquer coisa fala aí

      Abraço

  15. João Paulo Lopes Responder

    Olá Genilto, primeiramente parabéns pelo post. Realmente a muito pouco material sobre isso na internet. Eu estou com um problema com meu GENERATE_QRCODE, ele está dando um erro,
    Note: Recompile with -Xlint:deprecation for details. Você tem ideia do que pode ser isso?
    Desde já agradeço sua atenção.

    • Genilto Vanzin Autor do postResponder

      Olá João!
      Desculpa pela demora, vi seu comentário só agora.
      Fiz o teste novamente aqui.
      01 – Carreguei o arquivo com.genilto.qrcode.jar com o loadjava. – OK
      02 – Criei a tabela 02.tabela_TB L_QRCODE_IMAGE.sql – OK
      03 – Compilei o 03.java_source_GENERATE_QRCODE.jsp – OK
      04 – Compilei a package 04.package_QRCODE_K.pck – OK

      Tudo certo aqui.

      Pelo erro que você me passou pode ser alguma diferença de versão do java. Faça o seguinte, vamos descobrir qual a versão do java que você está rodando dentro do banco, para isso:

      Crie uma função que retorna AS propriedades do JAVA do banco de dados.
      ——————
      CREATE OR REPLACE FUNCTION get_java_property(prop IN VARCHAR2)
      RETURN VARCHAR2 IS
      LANGUAGE JAVA name ‘java.lang.System.getProperty(java.lang.String) return java.lang.String’;
      ——————
      Depois rode o seguinte comando para obter a versão do JAVA:
      ——————
      SELECT get_java_property(‘java.version’) FROM dual;
      ——————

      No meu caso ele retornou: 1.5.0_10
      Logo, estou usando a versão 1.5 do Java.

      Faz aí e veja qual a versão. Se for diferente, o que eu estou achando que é, dá uma conferida no código da rotina 03.java_source_GENERATE_QRCODE.jsp e veja se tem alguma função que é utilizada lá, que está Deprecada na sua versão. Talvez seja isso.

      Qualquer coisa fala aí

      Abraço

  16. Márcio Responder

    Muito interessante seu post amigo, é exatamente o que eu estava procurando para geração de QRCode. Poderia compartilhar os fontes para eu realizar alguns testes? Fico no aguardo. Grande abraço.

  17. Márcio Responder

    Muito interessante seu post amigo, é exatamente o que eu estava procurando para geração de QRCode. Poderia compartilhar os fontes para eu realizar alguns testes? Fico no aguardo. Grande abraço.

  18. Denilson Stadler Responder

    Grande Genilto!
    Pronto para trabalhar com Java e Oracle agora? Isso é ótimo!
    Parabéns pela matéria, bem interessante!
    Abraços
    Denilson

  19. Denilson Stadler Responder

    Grande Genilto!
    Pronto para trabalhar com Java e Oracle agora? Isso é ótimo!
    Parabéns pela matéria, bem interessante!
    Abraços
    Denilson

Deixe um comentário para Genilto Vanzin Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *