Genilto Vanzin

Simples assim.

Desenvolvimento, Dicas, EBS, Informática, Java, Oracle

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.  😀

Muito Obrigado desde já!

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.

Grande abraço galera! Espero muito ter ajudado.

62 Comments

  1. Vitor

    Genilto boa noite
    Você pode me enviar o link pra downlod

    Muito obrigado e parabéns pelo vídeo

  2. Mauricio Roberto Maciel

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

  3. Felipe

    Olá, muito bom o artigo. Poderia me enviar por email os fontes? Obrigado

  4. Glauber Moisés Garcia

    Genilto,

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

  5. Edmilson Felber

    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.

    • Genilto Vanzin

      Olá Edmilson!
      Mandei no seu e-mail.
      Abraço!

      • Edmilson Felber

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

      • Edilberto

        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

  6. Marcio Costa

    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

  7. Marcio Costa

    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

  8. 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

    • 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 [email protected] -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!

      • 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.

        • 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 [email protected] -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

          • 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.

          • 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.

          • 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 😀

          • 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

  9. 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

    • 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 [email protected] -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!

      • 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.

        • 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 [email protected] -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

          • 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.

          • 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.

          • 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 😀

          • 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

  10. Jaime

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

  11. Jaime

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

  12. Claudio Madeiras

    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.

  13. Claudio Madeiras

    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.

  14. everton

    manda para mim o código…valeu

  15. everton

    manda para mim o código…valeu

  16. Reinaldo

    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.

  17. Reinaldo

    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.

  18. 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.

    • 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

  19. 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.

    • 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

  20. 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.

  21. 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.

  22. Obrigado Denilson, que bom que gostou, espero que seja útil.

    Grande Abraço

  23. Obrigado Denilson, que bom que gostou, espero que seja útil.

    Grande Abraço

  24. Denilson Stadler

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

  25. Denilson Stadler

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

Deixe uma resposta

Theme by Anders Norén