Estou com o seguinte problema, eu tenho que gravar audio e video em um banco de dados (Firebird),
Eu já deixei os campos no BD como BLOB, eu preciso gravar o arquivo em si e não caminho…
Como que eu faço para gerar um objeto desse meu arquivo? e grava-lo no banco?
Eu tenho esse método feito, fiz para transformar imagem e audio em bytes e salvar no banco. Vê se te ajuda.
[code] /**
* Converte um arquivo (mp3, jpg, …) selecionado em um byte[] para ser gravado no banco de dados.
*
* @return retorna um array de bytes (byte[])
*/
public byte[] converter() {
File file = new File(“arquivo.avi”);
BufferedInputStream bis = null;
byte[] bFile = new byte[(int) file.length()];
try {
bis = new BufferedInputStream(new FileInputStream(file));
bis.read(bFile);
return bFile;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new byte[0];
}[/code]
Você deve ter visto que o output tem um método read que grava todos os bytes do arquivo um array de bytes. É só pegar esse array de bytes e gravar no banco depois.
acho que tem que usar o método: stm.setByte(2, video);
Você está usando firebird né? Tentou fazer como esse exemplo do link? Parece que não precisa usar o método converter() nesse caso. http://www.firebirdfaq.org/faq372/
Na verdade esse projeto é do meu TCC, onde vou testar desempenho de vários bancos, por isso preciso de um metodo que funcione em qualquer banco…
Eu tentei esse que você me disse:
stm.setByte(2, video);
Porem da o seguinte erro:
method setByte in interface PreparedStatement cannot be applied to given types;
required: int, byte
found: int,byte[]
reason: actual argument byte[] cannot be converted to byte by method invocation conversion