Gravar video, audio no banco - BLOB

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?

Grato.

Att:
Jonatas

Faz um OutputStream do arquivo e lê ele em um array de bytes. Pra gravar no banco é só gravar esse array de bytes.

Seria mais ou menos isso? (estou começando no java)

OutputStream objarquivo = new FileOutputStream(“arquivo.avi”);

Grato.

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]

É isso mesmo.

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.

Obrigado pelas dicas! Vou tentar fazer isso.

Eu estou quase conseguindo, porem agora estou com um problema…

Estou tentando gravar no banco, porem esta dando erro nessa linha:

stm.setBinaryStream(2, video);

a variavel video é do tipo byte - byte [] video

Esse é o metodo converter();

public byte[] converter(String local_arquivo) {

        File file = new File(local_arquivo);

        BufferedInputStream bis = null;

        byte[] bFile = new byte[(int) file.length()];

        try {
            bis = new BufferedInputStream(new FileInputStream(file));
            bis.read(bFile);
            return bFile;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return new byte[0];
    }

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

Tente o setBytes(), esse é que recebe um array por parâmetros.

Valeu !!! funcionou !!!