Inserindo arquivos em campos BLOB de uma base de dados

22
fev/10
0

Para inserir um arquivo, seja ele de qualquer formato, é necessário utilizar o método setBinaryStream implementado pelo PreparedStatement.

PreparedStatemente.setBinaryStream(int índice, Inputstream is, int tamanho);

Para o exemplo definimos uma tabela chamada arquivo que contém um campo BLOB chamado ARQ.

//Conexão normal, como qualquer JDBC
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@<IP>:<PORTA>:<SID>","<USUARIO>","<SENHA>");

//Acessando o arquivo a ser enviado e recuperando um InputStream
File arquivo = new File("<CAMINHO_COMPLETO_DO_ARQUIVO>");
FileInputStream fis = new FileInputStream(arquivo);

//Preparando a chamada normalmente
PreparedStatement ps = conn.prepareStatement("INSERT INTO ARQUIVO (arq) VALUES(?)");

//Informando o inputstream e o tamanho do arquivo a ser enviado
ps.setBinaryStream(1, fis, (int)arquivo.length());

ps.execute();

ps.close();
conn.close();

No meu teste utilizei a base de dados Oracle 8i. Como não tenho à disposição uma base MySQL/PostgreSQL/MS SQL Server, deixo vocês encarregados de testar e me enviar os resultados, OK? ;)

[]’s e até a próxima!

Gostou? Então, por favor, comente! Campanha: "Comentar não faz cair os dedos".

Recuperando cursor de uma procedure do Oracle no Java

17
jan/10
0

Percebi que muitas pessoas acabam chegando aqui pesquisando uma forma de recuperar cursores através de procedures do Oracle, para estas pessoas eu coloco à disposição uma maneira de fazê-lo.

Para que o cursor possa ser retornado é preciso declara-lo como REF CURSOR no spec da Package.

  --Criando o tipo REF CURSOR que será o cursor
  type g_cursor is ref cursor;

Em ambos, spec e body, você precisa declarar uma variável out do tipo do REF CURSOR mencionado acima.

  procedure PRO_RETORNA_LISTA_CARROS(
    i_id     in     tbl_car.car_id%type,
    o_cursor in out g_cursor);

Para devolver o cursor com os resultados (caso haja), é necessário abri-lo no body da procedure, desta forma:

open o_cursor for
          select car_id, company, model, color, hp, price
          from tbl_car
          where car_id = i_id;

A Package completa ficará assim:

create or replace package PAC_CURSOR is
  --Criando o tipo REF CURSOR que será o cursor
  type g_cursor is ref cursor;

  --Procedure que retornará o cursor
  procedure PRO_RETORNA_LISTA_CARROS(
    i_id     in     tbl_car.car_id%type,
    o_cursor in out g_cursor); -- Nosso cursor

end PAC_CURSOR;
/

create or replace package body PAC_CURSOR is
  procedure PRO_RETORNA_LISTA_CARROS(
    i_id     in     tbl_car.car_id%type,
    o_cursor in out g_cursor) is

       begin
        --Abrindo o cursor para retornar os valores
        open o_cursor for
          select car_id, company, model, color, hp, price
          from tbl_car
          where car_id = i_id;

  end PRO_RETORNA_LISTA_CARROS;

end PAC_CURSOR;

Temos o lado do Oracle pronto, agora precisamos tratar a chamada no Java.

Como o cursor está sendo retornado por uma procedure, usaremos um java.sql.CallableStatement.

CallableStatement cs = conn.prepareCall("{call PAC_CURSOR.PRO_RETORNA_LISTA_CARROS(?,?)}");

O registerOutParameter receberá o tipo oracle.jdbc.OracleTypes.CURSOR e retornará um java.sql.ResultSet. Iteraremos o ResultSet do mesmo modo que iteramos um Iterator.
Cada coluna retornada pelo SELECT será representado como um mapa, usando o getter correpondente. Por exemplo, chamaremos o método getString(<nome coluna>) quando retornar um varchar, getDate(<nome coluna>) quando retornar um date e etc.

O código completo fica assim:

//Chamando o procedure
CallableStatement cs = conn.prepareCall("{call PAC_CURSOR.PRO_RETORNA_LISTA_CARROS(?,?)}");

//Definindo o tipo do retorno, no caso o cursor
cs.registerOutParameter("o_cursor", OracleTypes.CURSOR);
cs.setLong("i_id", id);

cs.execute();//Executando a chamada

//Recuperando o cursor como um Resultset
ResultSet rs = (ResultSet)cs.getObject("o_cursor");

//Iterando as linhas retornadas
while(rs.next()){
	//Obtendo o valor das colunas
	System.out.println("ID: " + rs.getLong("car_id"));
	System.out.println("Marca: " + rs.getString("company"));
	System.out.println("Modelo: " + rs.getString("model"));
	System.out.println("Cor: " + rs.getString("color"));
	System.out.println("HP: " + rs.getString("hp"));
	System.out.println("Preco: " + rs.getFloat("price"));
}

No final você conseguirá obter qualquer valor retornado em um SELECT.

Até a próxima!

Gostou? Então, por favor, comente! Campanha: "Comentar não faz cair os dedos".

Habilitando Telnet e TFTP no Windows 7

22
dez/09
0

Assim como o Windows Vista, o Windows 7 não vem com os clients do Telnet e do TFTP habilitado por padrão.

Para habilitá-lo clique em Painel de Controle > Programas e Recursos > na lateral esquerda clique em Ativar ou desativar recursos do Windows > habilite o Cliente Telnet e Cliente TFTP e então clique em OK.

Não testei no Windows Vista, mas o processo deve ser o mesmo.

Até mais!

Gostou? Então, por favor, comente! Campanha: "Comentar não faz cair os dedos".

Os comandos mais usados de Unix agora para Win32

3
nov/09
0

Já pensou rodar comandos como grep, chown, tail e su no Windows e ainda poder substituir o dir pelo ls?

Procurando na internet por uma alternativa Win32 para o comando tail, encontrei o UnixUtils. Uma compilação para Windows dos comandos mais utilizados no Linux/Unix.

Você pode fazer o download do ZIP pelo SourceForge clicando aqui.

Até a próxima!

Gostou? Então, por favor, comente! Campanha: "Comentar não faz cair os dedos".

Gerando ‘EXE’ para iniciar suas aplicações Java

27
out/09
0

Percebi que muitos desenvolvedores precisam, ou já precisaram, distribuir suas aplicações Java de forma que os usuários de Windows pudessem iniciá-las naturalmente, sem a necessidade de chamar o comando java -jar <arquivo jar> ou executar um arquivo .BAT.

Eu, que também já passei por isso, encontrei um solução fácil e com muitos recursos: JSmooth.

Este programinha possibilita que você “transforme” seu JAR em um executável (EXE), mas claro, ainda sim você precisará ter o JVM instalado no micro que rodará o executável.

Aqui só destacarei as configurações que considero relevantes, então vamos ao que interessa!


Baixe o JSmooth em http://sourceforge.net/projects/jsmooth/files/;

Após instalá-lo (ou descompactá-lo, depende do arquivo que você baixou) execute-o;

No menu lateral, clique em “Skeleton“;

1

No “Skeleton Selection” você informa como a aplicação será executada, aqui selecionaremos Window Wrapper.

No “Skeleton Properties” você define uma mensagem caso o usuário não tenha o JVM instalador (Message) e onde ele poderá baixá-lo (URL).

Launch java app in the exe process” indica se o JAR será executado no mesmo processo do EXE, aparecendo somente o executável no Gerenciador de Tarefas do Windows, caso contrário também será o processo javaw.exe.

Single Instance” define se você ser aberto mais de uma instância.

Debug Console” executa o EXE em uma janela do prompt de comando, exibindo os possíveis Stacktraces gerados pela aplicação.

Agora clique em “Executable

2

Em “Executable Settings” você informa onde o EXE será gerado (“Executable Binary“), o ícone do EXE (“Executable Icon“) e qual será o diretório de execução da aplicação.

Clique em “Application

3

Primeiro, clique no ícone 7 e selecione o JAR que contém a classe principal (que contém o método main).

Em seguida, selecione a classe no campo “Main Class” clicando no botão 8.

O campo “Application arguments” você passa os parâmetros necessário para a sua classe.

Embedded JAR” possibilita que você integre seu JAR no EXE, ou seja, não será necessário ter os dois arquivos, pois o EXE descompactará o JAR a cada execução.

Agora, clique em “JVM Selection“.

4

Aqui você pode definir qual versão, mínima (“Minimum JVM Version“) e máxima (“Maximum JVM Version“), da virtual machine  rodará sua aplicação.

O”JVM Search Sequence” indica a ordem de busca do arquivo javaw.exe, neste caso ele procurará primeiro no registro, depois no diretório informado na variável de ambiente “JAVA_HOME” e assim por diante.

E então clique em “JVM Configuration

5

Aqui você informa a quantidade máxima de memória que sua aplicação poderá usar (“Maximum Memory“), quanta memória será alocada para sua aplicação assim que ela iniciar (“Initial Memory Allocation“) e os argumentos que será passado à JVM para sua aplicação.

Até este ponto você somente configurou o JSmooth, mas ainda não temos o EXE. Para isso, clique no botão 6, caso você ainda não tenha salvo o projeto será aberta uma janela para escolher o local de salvamento do arquivo. Feito isso, o EXE será gerado no diretório indicado no campo “Executable Binary” da tela “Executable“.

Agora é só dar um duplo clique no arquivo EXE e aplicação iniciará!

Para mais informações acessem http://jsmooth.sourceforge.net/

Espero que tenham gostado, comentem à vontade!

Até mais! :)

Gostou? Então, por favor, comente! Campanha: "Comentar não faz cair os dedos".