Bom dia a todos
Um amigo me procurou para dar uma ajuda em um trabalho feito em java EE com firebird. Acontece que nunca havia mexido com firebird antes.
Criei a classe de conexão, que funciona normalmente
public class Conecta {
public Connection conexao;
public Statement statement;
public Conecta() throws ClassNotFoundException, SQLException {
try {
Class.forName("org.firebirdsql.jdbc.FBDriver");
conexao = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:/Estoque/estoque.fdb","SYSDBA","masterkey");
statement = (Statement) conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
} catch (SQLException e) {
throw new SQLException(e.getMessage());
} catch (ClassNotFoundException e) {
throw new ClassNotFoundException(e.getMessage());
}
}
public synchronized void executeUpdate(String SQL) throws SQLException {
try {
statement.executeUpdate(SQL);
} catch (SQLException e) {
throw new SQLException(e.getMessage());
}
}
public synchronized ResultSet executeQuery(String query) throws SQLException {
try {
return statement.executeQuery(query);
} catch (SQLException e) {
throw new SQLException(e.getMessage());
}
}
public void fecharConexao() throws SQLException{
try {
statement.close();
} catch (SQLException e) {
throw new SQLException(e.getMessage());
}
}
}
Consigo fazer selects no banco e exibi-los na jsp.
O problema ocorreu quando criei uma servlet para gravar dados no banco.
Conecta conexao = null;
String nome = request.getParameter("nome");
String email = request.getParameter("email");
String senha = request.getParameter("senha");
try {
conexao = new Conecta();
ResultSet rs;
rs = conexao.executeQuery("SELECT * FROM usuario");
rs.moveToInsertRow();
rs.updateString("nome", nome);
rs.updateString("e-mail", email);
rs.updateString("senha", senha);
rs.updateRow();
rs.close();
conexao.fecharConexao();
} catch(SQLException ex){
Logger.getLogger(GravaUsuario.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(GravaUsuario.class.getName()).log(Level.SEVERE, null, ex);
}
response.sendRedirect("usuario.jsp?pesq=0");
Ao executar, está retornando o seguinte erro:
GRAVE: Servlet.service() for servlet [GravaUsuario] in context with path [/luiz] threw exception
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
at servlets.GravaUsuario.doPost(GravaUsuario.java:101)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
e
GRAVE: null
org.firebirdsql.jdbc.FBSQLException: Only insertRow() is allowed when result set is positioned on insert row.
at org.firebirdsql.jdbc.FBRowUpdater.executeStatement(FBRowUpdater.java:534)
at org.firebirdsql.jdbc.FBRowUpdater.updateRow(FBRowUpdater.java:416)
at org.firebirdsql.jdbc.AbstractResultSet.updateRow(AbstractResultSet.java:2500)
at servlets.GravaUsuario.doPost(GravaUsuario.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Alguém pode me ajudar, pois não encontrei a raiz do problema.
abraços