Olá Estou com uma pequena duvida, Eu tenho que entregar um trabalho na faculdade que Anexe arquivos no Banco de Dados, o professor nao explicou nada sobre isso ainda, apenas falou pra gente estudar, eu andei estudando e Entendi uma parte do que tem que ser feito, consegui fazer os códigos para fazer upload dos arquivos em um diretorio que eu escolhi. A minha duvida é como faço pra salvar isso no banco de dados, eu vi alguns posts gente falando sobre BLOB, mas nao entendi direito. Alguem pode me ajudar ou me passar algum material mais detalhado para estudo? Obrigado. Segue os codigos que eu ja fiz.
Servlet implementation class ServletUpload
*/ @WebServlet("/upload")
public class ServletUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
@see HttpServlet#HttpServlet()
*/
public ServletUpload() {
super();
}
Em Postgre, por exemplo, não existe o tipo “BLOB”, mas existe os tipos byte[] e bytea, com isso você poderia serializar o seu arquivo e salvá-lo diretamente nesses formatos (set/getBytes via JDBC, por exemplo). Quanto aos bancos que aceitam BLOB acredito que seja possível fazer isso da mesma forma.
Lembrando que sempre é bom limitar o tamanho dos bytes.
Estou usando Mysql, eu agora estou tentando apenas salvar o caminho do arquivo no banco de dados e depois recuperar o arquivo, mas como sou iniciante, esta dificil. rsrs
Olhei sim, até entendi como converter em bytes, agora to quebrando a cabeça pra ver como vou enviar pro banco de dados. Olha como esta ficando. Me corriga se tiver algo errado.
package servlet;
import br.com.util.Conexao;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import control.Upload;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* Servlet implementation class ServletUpload
*/
@WebServlet("/upload")
public class ServletUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletUpload() {
super();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
if (new Upload().anexos(request, response)) {
out.print("Arquivo enviado!");
} else {
out.print("Arquivo não enviado!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Converte um arquivo (mp3, jpg, ...) selecionado em um byte[] para ser gravado no banco de dados.
*
* @return retorna um array de bytes (byte[])
*/
public boolean insertFile( File f ){
Connection c = this.getConnection();//busca uma conexao com o banco
try {
PreparedStatement ps = c.prepareStatement("INSERT INTO arquivo( id, nome, arquivo ) VALUES ( nextval('seq_arquivo'), ?, ? )");
//converte o objeto file em array de bytes
InputStream is = new FileInputStream( f );
byte[] bytes = new byte[(int)f.length() ];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
ps.setString( 1, f.getName() );
ps.setBytes( 2, bytes );
ps.execute();
ps.close();
c.close();
return true;
} catch (SQLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
return false;
}
private Connection getConnection() {
Connection com= Conexao.abrirConexao();
if(com==null)
System.out.println("Nao conectou, se fu");
else
System.out.println("Conectado com sucesso");
return null;
}
}
Essa é minha Servlet.
Se possivel me ajude se estiver algo errado. Obrigado
A única coisa que você precisa é converter o seu arquivo para byte[] e fazer o bind no PreparedStatement com setBytes, como você está fazendo. Está dando algum erro pra você?
PS: Você está utilizando sequence no MySQL? Que eu saiba este banco só trabalha com AUTO_INCREMENT, mas enfim…
Estou tentando Criar a Tabela no banco de dados tambem, como ja disse é a primeira vez que vejo sobre esses assuntos, O trabalho é pra amanha, acho que nao vai dar tempo de entregar inteiro, mas acho que ja da pra tirar uma nota rsrs, Enfim, estou tentando criar a tabela e esta dando erro também. No codigo nao esta dando erro nenhum, esta fazendo o upload normal no diretorio que eu escolhi. Agora vou tentar criar a tabela e mandar pro banco.