Ajuda para inserir arquivos no Banco de Dados

1 resposta
andre.hebeler

Olá,

estou tendo dificuldades em desenvolver uma rotina para anexar arquivos para serem salvos no banco.
o sistema é o seguinte:

Tenho uma pagina jsp onde o usuário inclui uma nova OS, e esta repassa para uma outra jsp result onde trata as informações e faz a inserção no banco.

JSP Result:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    
<%@page import="br.com.jpessoa.conexao.Conexao, 
                br.com.jpessoa.bd.Os" %>
<%
	boolean vb_retorno = true ;

	Conexao.getConexao();
	Os os = new Os();

	String id_gestao   = (String)request.getParameter("id_gestao");
	String id_modulo   = (String)request.getParameter("id_modulo");
	String assunto     = (String)request.getParameter("assunto");
	String solicitacao = (String)request.getParameter("solicitacao");
		
	os.setUser_abertura(request.getParameter("user_abertura"));
	os.setId_gestao(Integer.parseInt(id_gestao));
	os.setId_modulo(Integer.parseInt(id_modulo));
	os.setId_unidade(request.getParameter("id_unidade"));
	os.setAnexo(request.getParameter("anexo"));
                os.setAssunto(assunto);
                os.setSolicitacao(solicitacao);
                /* Aguardando captura */
	os.setId_situacao(1);
	os.setFl_captura("N");

	vb_retorno = os.insert(Conexao.getConn(), response);
	
	Conexao.close();
		
	if (vb_retorno) 
		response.sendRedirect("../consulta/os.jsp?contexto=I&id_os=" + os.getId_os());
%>

E tenho também a classe de OS que contém as rotinas de trabalho com o banco:

package br.com.jpessoa.bd;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.http.HttpServletResponse;

public class Os {
	
	/* SQL para retornar todos os dodos */
	public String sql_select_todos = "select id_os, data_abertura, user_abertura, id_gestao, id_modulo, assunto, solicitacao, id_situacao, id_classificacao, fl_captura, data_encerramento, user_encerramento, id_ultimo_retorno, user_responsavel, anexo from sos.os order by id_os";
	
	/* SQL para retornar os dados de um registro */
	public String sql_select_unico = "select id_os, data_abertura, user_abertura, id_gestao, id_modulo, assunto, solicitacao, id_situacao, id_classificacao, fl_captura, data_encerramento, user_encerramento, id_ultimo_retorno, user_responsavel, anexo from sos.os where id_os=?";
	
	/* SQL para alteração */
	public String sql_update = "update sos.os set id_situacao=?, id_classificacao=?, data_encerramento=?, user_encerramento=? where id_os=?";
	
	/* SQL para alteração - SITUACAO */
	public String sql_update_situacao = "update sos.os set id_situacao=? where id_os=?";
		
	/* SQL para alteração - CAPTURA */
	public String sql_update_captura = "update sos.os set id_situacao=?, fl_captura=?, user_responsavel=? where id_os=?";
		
	/* SQL para alteração - ENCAMINHAMENTO */
	public String sql_update_encaminhamento = "update sos.os set id_situacao=?, user_responsavel=? where id_os=?";
		
	/* SQL para alteração - ENCERRAMENTO */
	public String sql_update_encerramento = "update sos.os set id_situacao=?, id_classificacao=?, user_encerramento=? where id_os=?";
		
	/* SQL para inserção */
	public String sql_insert = "insert into sos.os (id_os, user_abertura, id_gestao, id_modulo, assunto, solicitacao, id_situacao, fl_captura, id_unidade, anexo) values (?,?,?,?,?,?,?,?,?,?)";
	
	/* SQL para deleção */
	public String sql_delete = "delete sos.os where id_os=?";
	
	/* Variável de conexão */
	private PreparedStatement preparedstatement;
	
	/* Variável de conexão */
	private ResultSet rs;
	
	/* Variável de retorno */
	private int i=0;

	/* Chave primária
	 * Campo ID_OS NUMERIC(5) 
	 * */
	private int id_os;
	
	/* Campo DATA_ABERTURA DATE */  
	private String data_abertura;
	
	/* Campo USER_ABERTURA VARCHAR2(8) */
	private String user_abertura;
	
	/* Chave estrangeira
	 * Campo ID_GESTAO NUMERIC(3)
	 */
	private int id_gestao;
	
	/* Chave estrangeira
	 * Campo ID_MODULO NUMERIC(3)
	 */
	private int id_modulo;
	
	/* Campo ASSUNTO VARCHAR2(255) */
	private String assunto;
	
	/* Campo SOLICITACAO VARCHAR2(4000) */
	private String solicitacao;
	
	/* Chave estrangeira
	 * Campo ID_SITUACAO NUMERIC(2)
	 */
	private int id_situacao;
	
	/* Chave estrangeira
	 * Campo ID_CLASSIFICACAO NUMERIC(3)
	 */
	private int id_classificacao;
	
	/* Flag
	 * Campo FL_CAPTURA VARCHAR2(1)
	 */
	private String fl_captura;
	
	/* Campo DATA_ENCERRAMENTO DATE */
	private String data_encerramento;
	
	/* Campo USER_ENCERRAMENTO VARCHAR2(8) */
	private String user_encerramento;
	
	/* Chave estrangeira
	 * Campo ID_ULTIMO_RETORNO NUMERIC(6)
	 */
	private int id_ultimo_retorno;

	/* Chave estrangeira
	 * Campo ID_UNIDADE VARCHAR(2)
	 */
	private String id_unidade;
	
	/* Campo USER_RESPONSAVEL VARCHAR2(8) */
	private String user_responsavel;
	
	/* Campo USER_RESPONSAVEL VARCHAR2(8) */
	private String anexo;
	
	public Os() {
		super();
	}
	
	/* Método de atribuição do campo ID_OS */
	public void setId_os(int id_os){
		this.id_os = id_os;
	}
	
	/* Método de retorno do campo ID_OS */
	public int getId_os(){
		return id_os;
	}
	
	/* Método de atribuição do campo DATA_ABERTURA */
	public void setData_abertura(String data_abertura){
		this.data_abertura = data_abertura;
	}
	
	/* Método de retorno do campo DATA_ABERTURA */
	public String getData_abertura(){
		return data_abertura;
	}
	
	/* Método de atribuição do campo USER_ABERTURA */
	public void setUser_abertura(String user_abertura){
		this.user_abertura = user_abertura;
	}
	
	/* Método de retono do campo USER_ABERTURA */
	public String getUser_abertura(){
		return user_abertura;
	}
	
	/* Método de atribuição do campo ID_GESTAO */
	public void setId_gestao(int id_gestao){
		this.id_gestao = id_gestao;
	}
	
	/* Método de retorno do campo ID_GESTAO */
	public int getId_gestao(){
		return id_gestao;
	}
	
	/* Método de atribuição do campo ID_MODULO */
	public void setId_modulo(int id_modulo){
		this.id_modulo = id_modulo;
	}
	
	/* Método de retorno do campo ID_MODULO*/
	public int getId_modulo(){
		return id_modulo;
	}
	
	/* Método de atribuição do campo ASSUNTO */
	public void setAssunto(String assunto){
		this.assunto = assunto;
	}
	
	/* Método de retorno do campo ASSUNTO */
	public String getAssunto(){
		return assunto;
	}
	
	/* Método de atribuição do campo SOLICITACAO */
	public void setSolicitacao(String solicitacao){
		this.solicitacao = solicitacao;
	}
	
	/* Método de retorno do campo SOLICITACAO */
	public String getSolicitacao(){
		return solicitacao;
	}
	
	/* Método de atribuição do campo ID_SITUACAO */
	public void setId_situacao(int id_situacao){
		this.id_situacao = id_situacao;
	}
	
	/* Método de retorno do campo ID_SITUACAO */
	public int getId_situacao(){
		return id_situacao;
	}
	
	/* Método de atribuição do campo ID_CLASSIFICACAO */
	public void setId_classificacao(int id_classificacao){
		this.id_classificacao = id_classificacao;
	}
	
	/* Método de retorno do campo ID_CLASSIFICACAO */
	public int getId_classificacao(){
		return id_classificacao;
	}
	
	/* Método de atribuição do campo FL_CAPTURA */
	public void setFl_captura(String fl_captura){
		this.fl_captura = fl_captura;
	}
	
	/* Método de retorno do campo FL_CAPTURA */
	public String getFl_captura(){
		return fl_captura;
	}
	
	/* Método de atribuição do campo DATA_ENCERRAMENTO */
	public void setData_encerramento(String data_encerramento){
		this.data_encerramento = data_encerramento;
	}
	
	/* Método de retorno do campo DATA_ENCERRAMENTO */
	public String getData_encerramento(){
		return data_encerramento;
	}
	
	/* Método de atribuição do campo USER_ENCERRAMENTO */
	public void setUser_encerramento(String user_encerramento){
		this.user_encerramento = user_encerramento;
	}
	
	/* Método de retorno do campo USER_ENCERRAMENTO */
	public String getUser_encerramento(){
		return user_encerramento;
	}
	
	/* Método de atribuição do campo ID_ULTIMO_RETORNO */
	public void setId_ultimo_retorno(int id_ultimo_retorno){
		this.id_ultimo_retorno = id_ultimo_retorno;
	}
	
	/* Método de retorno do campo ID_ULTIMO_RETORNO */
	public int getId_ultimo_retorno(){
		return id_ultimo_retorno;
	}
	
	/* Método de atribuição do campo ID_UNIDADE */
	public void setId_unidade(String id_unidade) {
		this.id_unidade = id_unidade;
	}

	/* Método de retorno do campo ID_UNIDADE */
	public String getId_unidade() {
		return id_unidade;
	}

	/* Método de atribuição do campo USER_RESPONSAVEL */
	public void setUser_responsavel(String user_responsavel) {
		this.user_responsavel = user_responsavel;
	}

	/* Método de retorno do campo USER_RESPONSAVEL */
	public String getUser_responsavel() {
		return user_responsavel;
	}
	
	/* Método de atribuição do campo USER_RESPONSAVEL */
	public void setAnexo(String anexo) {
		this.anexo = anexo;
	}

	/* Método de retorno do campo USER_RESPONSAVEL */
	public String getAnexo() {
		return anexo;
	}

	/* Método de inserção da tabela OS */
	public boolean insert(Connection conn, HttpServletResponse response)
	throws IOException {
		i = 0;
		PrintWriter out = response.getWriter();
		try {
			if (getId_gestao() == 0 || getId_modulo() == 0){
				out.println("<table width=\"49%\" border=1 cellspacing=0 cellpadding=10 align=center bordercolor=\"#006600\">");
				out.println("	<tr>");
				out.println("		<td>");
				out.println("			<p ><font size=2 face=\"Verdana, Arial, Helvetica, sans-serif\" font color=\"#006600\">");
				out.println("			OCORREU UM ERRO!!!</font></p><p><font size=1 face=\"Verdana, Arial, Helvetica, sans-serif\">");
				out.println("			Foi encontrado um erro no momento de inserir o registro.");
				out.println("			<br>");
				out.println("			Os campos Gestão e Módulo devem ser informados OBRIGATÓRIAMENTE!");
				out.println("			<br><br>");
				out.println("			<a >");
				out.println("			Voltar");
				out.println("			</a>");
				out.println("			</font></p>");
				out.println("		&lt;/td&gt;");
				out.println("	&lt;/tr&gt;");
				out.println("&lt;/table&gt;");
			}else{
				geraId_os(conn);
				
				conn.setAutoCommit(false);
				preparedstatement = conn.prepareStatement(sql_insert);
				preparedstatement.setInt(1, getId_os());
				preparedstatement.setString(2, getUser_abertura().toLowerCase());
				preparedstatement.setInt(3, getId_gestao());
				preparedstatement.setInt(4, getId_modulo());
				preparedstatement.setString(5, getAssunto().toUpperCase());
				preparedstatement.setString(6, getSolicitacao().toUpperCase());
				preparedstatement.setInt(7, getId_situacao());
				preparedstatement.setString(8, getFl_captura());
				preparedstatement.setString(9, getId_unidade());
				preparedstatement.setString(10, getAnexo());
				i = preparedstatement.executeUpdate();
				preparedstatement.close();
				
				conn.commit();	
			}
		}
		catch (SQLException e) {
			out.println("&lt;table width=\"49%\" border=1 cellspacing=0 cellpadding=10 align=center bordercolor=\"#006600\"&gt;");
			out.println("	&lt;tr&gt;");
			out.println("		&lt;td&gt;");
			out.println("			<p ><font size=2 face=\"Verdana, Arial, Helvetica, sans-serif\" font color=\"#006600\">");
			out.println("			OCORREU UM ERRO!!!</font></p><p><font size=1 face=\"Verdana, Arial, Helvetica, sans-serif\">");
			out.println("			Foi encontrado um erro no momento de inserir o registro.");
			out.println("			<br>");
			out.println("			" + e.toString());
			out.println("			<br><br>");
			out.println("			<a >");
			out.println("			Voltar");
			out.println("			</a>");
			out.println("			</font></p>");
			out.println("		&lt;/td&gt;");
			out.println("	&lt;/tr&gt;");
			out.println("&lt;/table&gt;");
		}
		
		if (i &gt; 0) {
			return true;
		}
		else {
			return false;
		}
	}
	
	/* Método de alteração da tabela OS */
	public boolean update(Connection conn, HttpServletResponse response)
	throws IOException {
		i = 0;
		PrintWriter out = response.getWriter();
		try { 
			conn.setAutoCommit(false);
			
			preparedstatement = conn.prepareStatement(sql_update);
			preparedstatement.setInt(1, getId_situacao());
			preparedstatement.setInt(2, getId_classificacao());
			preparedstatement.setString(3, getData_encerramento());
			preparedstatement.setString(4, getUser_encerramento().toLowerCase());
			preparedstatement.setInt(5, getId_os());
			i = preparedstatement.executeUpdate();
			preparedstatement.close();
			
			conn.commit();	
		}
		catch (SQLException e) {
			out.println("&lt;table width=\"49%\" border=1 cellspacing=0 cellpadding=10 align=center bordercolor=\"#006600\"&gt;");
			out.println("	&lt;tr&gt;");
			out.println("		&lt;td&gt;");
			out.println("			<p ><font size=2 face=\"Verdana, Arial, Helvetica, sans-serif\" font color=\"#006600\">");
			out.println("			OCORREU UM ERRO!!!</font></p><p><font size=1 face=\"Verdana, Arial, Helvetica, sans-serif\">");
			out.println("			Foi encontrado um erro no momento de alterar o registro.");
			out.println("			<br>");
			out.println("			" + e.toString());
			out.println("			<br><br>");
			out.println("			<a >");
			out.println("			Voltar");
			out.println("			</a>");
			out.println("			</font></p>");
			out.println("		&lt;/td&gt;");
			out.println("	&lt;/tr&gt;");
			out.println("&lt;/table&gt;");
		}
		
		if (i &gt; 0) {
			return true;
		}
		else {
			return false;
		}
	}
	
	/* Método de alteração da tabela OS */
	public boolean captura(Connection conn, HttpServletResponse response)
	throws IOException {
		i = 0;
		PrintWriter out = response.getWriter();
		try { 
			conn.setAutoCommit(false);
			
			preparedstatement = conn.prepareStatement(sql_update_captura);
			preparedstatement.setInt(1, getId_situacao());
			preparedstatement.setString(2, getFl_captura());
			preparedstatement.setString(3, getUser_responsavel().toLowerCase());
			preparedstatement.setInt(4, getId_os());
			i = preparedstatement.executeUpdate();
			preparedstatement.close();
			
			conn.commit();	
		}
		catch (Exception e) {
			out.println("&lt;table width=\"49%\" border=1 cellspacing=0 cellpadding=10 align=center bordercolor=\"#006600\"&gt;");
			out.println("	&lt;tr&gt;");
			out.println("		&lt;td&gt;");
			out.println("			<p ><font size=2 face=\"Verdana, Arial, Helvetica, sans-serif\" font color=\"#006600\">");
			out.println("			OCORREU UM ERRO!!!</font></p><p><font size=1 face=\"Verdana, Arial, Helvetica, sans-serif\">");
			out.println("			Foi encontrado um erro no momento de capturar a OS.");
			out.println("			<br>");
			out.println("			" + e.toString());
			out.println("			<br><br>");
			out.println("			<a >");
			out.println("			Voltar");
			out.println("			</a>");
			out.println("			</font></p>");
			out.println("		&lt;/td&gt;");
			out.println("	&lt;/tr&gt;");
			out.println("&lt;/table&gt;");
		}
		
		if (i &gt; 0) {
			return true;
		}
		else {
			return false;
		}
	}
	
	/* Método de alteração da tabela OS */
	public boolean encaminhamento(Connection conn, HttpServletResponse response)
	throws IOException {
		i = 0;
		PrintWriter out = response.getWriter();
		try { 
			conn.setAutoCommit(false);
			
			preparedstatement = conn.prepareStatement(sql_update_encaminhamento);
			preparedstatement.setInt(1, getId_situacao());
			preparedstatement.setString(2, getUser_responsavel().toLowerCase());
			preparedstatement.setInt(3, getId_os());
			i = preparedstatement.executeUpdate();
			preparedstatement.close();
			
			conn.commit();	
		}
		catch (Exception e) {
			out.println("&lt;table width=\"49%\" border=1 cellspacing=0 cellpadding=10 align=center bordercolor=\"#006600\"&gt;");
			out.println("	&lt;tr&gt;");
			out.println("		&lt;td&gt;");
			out.println("			<p ><font size=2 face=\"Verdana, Arial, Helvetica, sans-serif\" font color=\"#006600\">");
			out.println("			OCORREU UM ERRO!!!</font></p><p><font size=1 face=\"Verdana, Arial, Helvetica, sans-serif\">");
			out.println("			Foi encontrado um erro no momento de encaminhar a OS.");
			out.println("			<br>");
			out.println("			" + e.toString());
			out.println("			<br><br>");
			out.println("			<a >");
			out.println("			Voltar");
			out.println("			</a>");
			out.println("			</font></p>");
			out.println("		&lt;/td&gt;");
			out.println("	&lt;/tr&gt;");
			out.println("&lt;/table&gt;");
		}
		
		if (i &gt; 0) {
			return true;
		}
		else {
			return false;
		}
	}
	
	/* Método de alteração da tabela OS */
	public boolean encerramento(Connection conn, HttpServletResponse response)
	throws IOException {
		i = 0;
		PrintWriter out = response.getWriter();
		try { 
			conn.setAutoCommit(false);
						
			preparedstatement = conn.prepareStatement(sql_update_encerramento);
			preparedstatement.setInt(1, getId_situacao());
			preparedstatement.setInt(2, getId_classificacao());
			preparedstatement.setString(3, getUser_encerramento().toLowerCase());
			preparedstatement.setInt(4, getId_os());
			i = preparedstatement.executeUpdate();
			preparedstatement.close();
			
			conn.commit();	
		}
		catch (Exception e) {
			out.println("&lt;table width=\"49%\" border=1 cellspacing=0 cellpadding=10 align=center bordercolor=\"#006600\"&gt;");
			out.println("	&lt;tr&gt;");
			out.println("		&lt;td&gt;");
			out.println("			<p ><font size=2 face=\"Verdana, Arial, Helvetica, sans-serif\" font color=\"#006600\">");
			out.println("			OCORREU UM ERRO!!!</font></p><p><font size=1 face=\"Verdana, Arial, Helvetica, sans-serif\">");
			out.println("			Foi encontrado um erro no momento de encerrada a OS.");
			out.println("			<br>");
			out.println("			" + e.toString());
			out.println("			<br><br>");
			out.println("			<a >");
			out.println("			Voltar");
			out.println("			</a>");
			out.println("			</font></p>");
			out.println("		&lt;/td&gt;");
			out.println("	&lt;/tr&gt;");
			out.println("&lt;/table&gt;");
		}
		
		if (i &gt; 0) {
			return true;
		}
		else {
			return false;
		}
	}
	
	/* Método de deleção da tabela OS */
	public boolean delete(Connection conn, HttpServletResponse response) 
	throws IOException{
		i = 0;
		PrintWriter out = response.getWriter();
		try {
			conn.setAutoCommit(false);
			
			preparedstatement = conn.prepareStatement(sql_delete);
			preparedstatement.setInt(1, getId_os());
			i = preparedstatement.executeUpdate();
			preparedstatement.close();
			
			conn.commit();
		}
		catch (SQLException e) {
			out.println("&lt;table width=\"49%\" border=1 cellspacing=0 cellpadding=10 align=center bordercolor=\"#006600\"&gt;");
			out.println("	&lt;tr&gt;");
			out.println("		&lt;td&gt;");
			out.println("			<p ><font size=2 face=\"Verdana, Arial, Helvetica, sans-serif\" font color=\"#006600\">");
			out.println("			OCORREU UM ERRO!!!</font></p><p><font size=1 face=\"Verdana, Arial, Helvetica, sans-serif\">");
			out.println("			Foi encontrado um erro no momento de excluir o registro.");
			out.println("			<br>");
			out.println("			" + e.toString());
			out.println("			<br><br>");
			out.println("			<a >");
			out.println("			Voltar");
			out.println("			</a>");
			out.println("			</font></p>");
			out.println("		&lt;/td&gt;");
			out.println("	&lt;/tr&gt;");
			out.println("&lt;/table&gt;");
		}
		if (i &gt; 0) {
			return true;
		}
		else {
			return false;
		}
	}
	
	private void geraId_os(Connection conn){
		String sql="SELECT (SOS.SEQ_OS.NEXTVAL) ID FROM DUAL";
		
		try{
			preparedstatement = conn.prepareStatement(sql);
			rs = preparedstatement.executeQuery();
			rs.next();
			setId_os(rs.getInt("ID"));
			preparedstatement.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
	}

}

Nesta, para teste, tratei a inserção no campo BLOB como se fosse um objeto String … mais não é isso.
Achei esta rotina na internet para inserção em um campo do tipo BLOB, mas não entendi mto bem a ponto de implementa-la no meu projeto:

// copia arquivo para campo blob     
Blob blob = rs.getBlob("imagem");     
byte[] bbuf = new byte[1024];     
InputStream bin = new FileInputStream(byteFile);     
OutputStream bout = ((BLOB) blob).getBinaryOutputStream(); // específico driver oracle     
// cout = clob.setCharacterStream(0);     
int bytesRead = 0;     
while ((bytesRead = bin.read(bbuf)) != -1) {     
    bout.write(bbuf, 0, bytesRead);     
}     
bin.close();     
bout.close();

Gostaria de uma ajuda… não sei se estou no caminho certo !!!

desde já agradeço a atenção.

At,
André Hebeler.

1 Resposta

D

Eu não tenho experiência com JDBC puro. Quase sempre utilizo Hibernate, mas quando precisei gravar um objeto no banco usei o seguinte recurso:

ByteArrayOutputStream outputSteam = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputSteam);
            objectOutputStream.writeObject(objetoQueEuQueroGravar);
            byte[] streamDoObjetoQueEuQueroGravar = outputSteam.toByteArray();

Dai eu passo para o Hibernate a “streamDoObjetoQueEuQueroGravar”. Tente fazer isso. Passe como parâmetro no seu statement de update a stream.

Para recuperar os dados, use:

byte[] streamDoObjetoQueEuGravei = &lt;pega a stream do statement&gt;;
            ObjectInputStream inputStream = new ObjectInputStream(new ByteArrayInputStream(streamDoObjetoQueEuGravei));
            ClasseDoObjetoQueEuGravei objeto = (ClasseDoObjetoQueEuGravei)inputStream.readObject();

Espero ter ajudado. Até.

Criado 16 de julho de 2008
Ultima resposta 16 de jul. de 2008
Respostas 1
Participantes 2