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(" </td>");
out.println(" </tr>");
out.println("</table>");
}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("<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(" " + e.toString());
out.println(" <br><br>");
out.println(" <a >");
out.println(" Voltar");
out.println(" </a>");
out.println(" </font></p>");
out.println(" </td>");
out.println(" </tr>");
out.println("</table>");
}
if (i > 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("<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 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(" </td>");
out.println(" </tr>");
out.println("</table>");
}
if (i > 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("<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 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(" </td>");
out.println(" </tr>");
out.println("</table>");
}
if (i > 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("<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 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(" </td>");
out.println(" </tr>");
out.println("</table>");
}
if (i > 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("<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 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(" </td>");
out.println(" </tr>");
out.println("</table>");
}
if (i > 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("<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 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(" </td>");
out.println(" </tr>");
out.println("</table>");
}
if (i > 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.