Como melhorar desempenho conexao remota

boa tarde galera

tenho um sistema em que roda na rede e na net… porém, o desempenho via net está baixo.
meu sistema foi desenvolvido com java + mysql obs.: desktop

minha conexão:

[code]package padrao;
import java.sql.*;
import javax.swing.JOptionPane;

public class conecta {

public conecta() {}
Connection conn = null;
public Connection conecta(){
Conecta_ACCESS conexao = new Conecta_ACCESS();
try{
Connection con = conexao.conect();
Statement stmt = con.createStatement();
String procura = “select * from tbl_caminho where CODIGO=”+ 1;
ResultSet rs = stmt.executeQuery(procura);
while(rs.next()){
String ip = rs.getString(“ENDERECO”);//busca endereço(ip) no bd acess
//String driver = “org.gjt.mm.mysql.Driver”;
String driver = “com.mysql.jdbc.Driver”; //Classe do driver JDBC
String banco = “bdrn”; //Nome do Banco criado
String host = ip; //Maquina onde está o banco
String str_conn = “jdbc:mysql://” + host + “:3306/” + banco; //URL de conexão
String usuario = “root”; //Usuário do banco
String senha = “nalldo36”; //Senha de conexão
try {
Class.forName(driver); //Carrega o driver
conn = DriverManager.getConnection(str_conn, usuario, senha);
}catch(ClassNotFoundException e){
JOptionPane.showMessageDialog(null,“n Driver não encontrado!\n”+ e,“ATENÇÃO”,JOptionPane.WARNING_MESSAGE);
return null;
}catch(SQLException e){
JOptionPane.showMessageDialog(null,“Erro na Conexão com Banco de Dados\n”+ e,“ATENÇÃO”,JOptionPane.WARNING_MESSAGE);
frmEnderecoBD edb = new frmEnderecoBD(null, true);
edb.setVisible(true);
return null;
}}
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao consultar… " + e.getMessage());
}
return conn;
}
}[/code]

alguem pode me dar uma :idea: para melhorar o desempenho (velocidade)

Comece usando um profiler e descobrindo onde está o problema:
https://visualvm.dev.java.net/
http://java.sun.com/javase/6/docs/technotes/guides/visualvm/profiler.html

[quote=N@lldo]boa tarde galera

tenho um sistema em que roda na rede e na net… porém, o desempenho via net está baixo.
meu sistema foi desenvolvido com java + mysql obs.: desktop

[/quote]

Deve estar mesmo, porque
a) Não se deve abrir bancos de dados diretamente na Internet
b) Na eventualidade de você fazer isso (que perigo!) você não deve ficar abrindo e fechando as conexões a toda hora, porque isso é demorado em rede local e mais demorado ainda na Internet. Use um pool de conexões como o C3PO ou o DBCP.

agradeço pela atenção de vcs!

entanglement voce tocou em um assunto que muito me interesa…
realmente minha conexão ta uma loucura rsrss… esta sempre abrindo e fechando.

entanglement pesso humildemente uma ajuda para organizar minha conexão…
eu procurei em varios lugares e nao encontrei um passo a passo para desenvolver um pool de conexão, pois, nao sei por onde começar :roll:
obs.: meu sistema java+mysql “desktop”

Quando fiz um sistema com essas características, fizemos o seguinte:

a) Deixar o gerencimento de abrir e fechar conexões para o Spring. É bem fácil adaptar seu sistema para sair do JDBC comum e usar o Spring. O código fica mais simples, vale a pena (pense que com o Spring vc não precisa ficar criando esses try…catch…finally);
b) Usamos o Jakarta DBCP. Ele simplesmente fornece um novo objeto de DataSource e as conexões que ele retorna são automaticamente colocadas no pool quando o método close é chamado.

Mesmo que você não use o Spring, é extremamente simples com o Jakarta. Na verdade, seu código praticamente não muda, só o que muda é o DataSource das conexões.

Abaixo um exemplo do Jakarta DBCP:
http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/doc/BasicDataSourceExample.java?revision=897457&view=markup

ViniGodoy acompanho esse forum a um ano e meio… nesse periodo pude observar que vc ajudou bastante iniciante (meu caso) parabéns

bom… para eu usar o jakarta DBCP
1º tenho q baixar algum driver
2º tenho q mudar minha classe de conexão igual ao exemplo q vc me enviou
3º tenho q inserir os DataSource no meu projeto

Provavelmente só a classe Conecta_ACESS vai mudar.

Ela vai usar o BasicDataSource para criar as conexões, como no exemplo que te passei. O que é legal, é que a conexão do Pool também implementa a interface connection. Quando vc chamar o close() de uma conexão que está no pool, ao invés de fechar, ela simplesmente volta para o pool… O que significa que seu código, que usa o Connection, não muda nada.

Driver não. Só o .jar do jakarta DBCP.

Sim, mas veja, não muda quase nada.

Um único DataSource, dentro da sua classe Connecta_ACCESS…

Sei q o ViniGodoy tentou simplificar pra mim como fazer conexao de pool, porem, ainda nao consegui fazer a mudança :oops:

nunca tive tanta duvida a respeito de uma coisa que parece ser tão simples…
será que e possivel manipular essa minha classe de conexão para q ela possa fazer uma conexão de pool

[code]package padrao;
import java.sql.*;
import javax.swing.JOptionPane;

public class conecta {

public conecta() {}
Connection conn = null;
public Connection conecta(){
Conecta_ACCESS conexao = new Conecta_ACCESS();
try{
Connection con = conexao.conect();
Statement stmt = con.createStatement();
String procura = “select * from tbl_caminho where CODIGO=”+ 1;
ResultSet rs = stmt.executeQuery(procura);
while(rs.next()){
String ip = rs.getString(“ENDERECO”);//busca endereço(ip) no bd acess
//String driver = “org.gjt.mm.mysql.Driver”;
String driver = “com.mysql.jdbc.Driver”; //Classe do driver JDBC
String banco = “bdrn”; //Nome do Banco criado
String host = ip; //Maquina onde está o banco
String str_conn = “jdbc:mysql://” + host + “:3306/” + banco; //URL de conexão
String usuario = “root”; //Usuário do banco
String senha = “nalldo36”; //Senha de conexão
try {
Class.forName(driver); //Carrega o driver
conn = DriverManager.getConnection(str_conn, usuario, senha);
}catch(ClassNotFoundException e){
JOptionPane.showMessageDialog(null,“n Driver não encontrado!\n”+ e,“ATENÇÃO”,JOptionPane.WARNING_MESSAGE);
return null;
}catch(SQLException e){
JOptionPane.showMessageDialog(null,“Erro na Conexão com Banco de Dados\n”+ e,“ATENÇÃO”,JOptionPane.WARNING_MESSAGE);
frmEnderecoBD edb = new frmEnderecoBD(null, true);
edb.setVisible(true);
return null;
}}
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Erro ao consultar… " + e.getMessage());
}
return conn;
}
} [/code]

obrigado :roll:

A classe que vai mudar é a Conecta_ACESS(), não essa. Posta o código da Conecta_ACCESS aqui.

[code]import java.sql.*;
import javax.swing.JOptionPane;
public class Conecta_ACCESS {

public Conecta_ACCESS() {    }
private String url = "jdbc:odbc:Endereco";
private String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
private String user ="naldo"; 
private String pwd = "nalldo36";//Senha do Banco de dados
Connection con = null;    
 
public Connection conect(){
    try{
        Class.forName(driver);
        con = DriverManager.getConnection(url, user,pwd);            
    }catch(ClassNotFoundException e){
        JOptionPane.showMessageDialog(null,"Ocorreu um erro no sistema, se o problema persistir contate o administrador:\n Driver n�o encontrado!\n"+ e,"ATEN��O",JOptionPane.WARNING_MESSAGE);
    }catch(SQLException e){
        JOptionPane.showMessageDialog(null,"Ocorreu um erro no sistema, se o problema persistir contate o administrador:\n Erro na Conex�o com Banco\n"+ e,"ATEN��O",JOptionPane.WARNING_MESSAGE);            
    }
    return con;  
}

}[/code]

ViniGodoy nao desista de me ajudar :lol: