Inserindo arquivos em campos BLOB de uma base de dados
fev/100
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
jan/100
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
dez/090
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
nov/090
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
out/090
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“;
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”
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”
Primeiro, clique no ícone
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
.
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“.
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”
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
, 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!
English



