Problemas com o JDBC

7 respostas
T

Estou com problema com o JDBC pois tenho uma aplicação
só que ela estava criando varias sessões no banco.
para cada bean da pagina [color=“red”]JSP[/color]
eu reescrevi o método construtor e consegui baixar para 1 sessão no banco apenas
mas agora não esta funcionando corretamente
não consigo trazer nenhuma informação do banco.
Será que alguém pode me ajudar?

import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class ConnectionDB implements HttpSessionBindingListener{

  private static Connection connection;
  private static ConnectionDB instance ;
  private Statement statement;
  
  private static final String drive = "oracle.jdbc.driver.OracleDriver";
  
  private static final String dbURL="jdbc:oracle:thin:@1.0.0.0:1521:teste"; 
  
  private static String user;// = "user";
  private static String pws; //= "senha";
  private String mensagem ="";
  
  public ConnectionDB()  {
  }
  public void ConnectionDB(String user, String pws )  {
    this.user = user;
    this.pws = pws;
    
    try {
      Class.forName(drive);
      connection=DriverManager.getConnection(dbURL,user,pws);      
      
      statement = connection.createStatement(
        ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_READ_ONLY);
        mensagem = "Conectado";
    } catch (ClassNotFoundException e){

      connection = null;
    } catch (SQLException e ){
      connection=null;
      if (e.getErrorCode() == 1017){
          mensagem = "erro de usuario";
      }else{
          mensagem = "ConnectionDB: Driver não carregado";
      }
      
    }
      }
  public static Connection getConnection(){
    return connection;
  }
  
  public void commit() throws SQLException{
    connection.commit();
  }
  public void rollback() throws SQLException{
    connection.rollback();
  }
  
  public void setAutoCommit(boolean autoCommit)throws SQLException{
    connection.setAutoCommit(autoCommit);
  }
  public ResultSet  executeQuery(String sql) throws SQLException{
    return statement.executeQuery(sql);
  }
  public int executeUpdate(String sql) throws SQLException{
    return statement.executeUpdate(sql);
  }
  public void valueBound(HttpSessionBindingEvent event){
    System.err.println("ConexaoBD: método valueBound chamado ");
    try {
       if (connection == null|| connection.isClosed()){
          connection = DriverManager.getConnection(dbURL,user,pws);
          statement = connection.createStatement();
       }
    } catch (SQLException e ){
       connection = null;
    }
  }
  public void valueUnbound(HttpSessionBindingEvent event){
    try {
       connection.close();
    } catch(SQLException e ){}
    finally{
        connection = null;
    }
  }
  protected void finalizer(){
    try{
      connection.close();
    } catch (SQLException e){}
  }

 public static ConnectionDB getInstance(){
  
   if (instance == null){
   instance = new  ConnectionDB();
   
   }
   return instance;
 }

  public void setUser(String user)
  {
    this.user = user;
  }

  public void setPws(String pws)
  {
    this.pws = pws;
  }
}

7 Respostas

J
Opa

bom, dei uma olhadinha ali, e vi que vc está fazendo um

connection = null;

porém isso nao faz encerrar a conexao explicitamente tente fazer assim

connection.close();

creio que isso resolva seu problema =)

abraços!!

cya!

T
<blockquote><div class="quote-author">“jujo”:</div>Opa…

bom, dei uma olhadinha ali, e vi que vc está fazendo um

connection = null;

porém isso nao faz encerrar a conexao explicitamente… tente fazer assim

connection.close();

creio que isso resolva seu problema =)

abraços!!

cya!
minha pagina inicial é um servlet de logon, que conectar numa boa só que
as Jsp nao vem a conecxao que ja foi criada …
como eu faço para pegar esta conecxao ativa?
na JSP estou colocando o

M

teofilo, tente separar mais as camadas do teu código, bem… quero dizer pra tu tirar o acesso ao banco pelo JSP, por exemplo, fala uma classe q sirva só pra essa conexão, e nela, coloque os métodos q vão chamar os respectivos SQLs, q retornam um ArrayList por ex, com os dados do banco…

T

Quando eu retiro da pagina a tag

ele cria varias sessões no banco isso eu vi pela query no Oracle

select username, user#,Status, machine, program, LOGON_TIME from v$session a where a.username = 'SCOTT' and a.machine = 'R2D2'

R

[color=“darkblue”]Olá!
Cara eu não sei se isso vai te ajudar, mas eu reparei que vc está usando “System.”, esse comando é somente identificado do lado do server oq acoontece q vc não pode acessar as msgs… tive um problema com isso, meu código estava certo mas eu não visualizava nada por causa disso… tente usar “out.write()”, pelo menos comigo foi esse o problema :grin: [/color]

M

teofilo, pesquise por pool de conexões, data source, padrão DAO… :slight_smile: , se quiser uma ajuda de como implementar no Tomcat, é só falar…

T

“riqueneil”:
[color=“darkblue”]Olá!
Cara eu não sei se isso vai te ajudar, mas eu reparei que vc está usando “System.”, esse comando é somente identificado do lado do server oq acoontece q vc não pode acessar as msgs… tive um problema com isso, meu código estava certo mas eu não visualizava nada por causa disso… tente usar “out.write()”, pelo menos comigo foi esse o problema :grin: [/color]

E para visualisar durante o Debug

Criado 2 de agosto de 2004
Ultima resposta 9 de ago. de 2004
Respostas 7
Participantes 4