Java + mysql em rede lento

3 respostas
C

testei um sistema que estou desenvolvendo pela primeira vez em rede, mas qualquer busca que ele faça está muito lenta, o servidor e o cliente são máquinas potentes, quando se navega normalmente pela rede não há problemas, mas na hora de fazer uma consulta simples no banco de dados como verificar um login demora bastante, será q alguém tem alguma idéia do q possa estar acontecendo?

3 Respostas

C

eu consegui melhorar o desempenho mudando o statement que estava usando.

eu estava usando o java.sql.Statement

procurando no material de java achei o java.sql.PreparedStatement
onde está indicando que é mais eficiente para estar sendo utilizando

com o PreparedStatement realmente melhorou bastante o acesso ao servidor pela rede.

se alguém estiver com o mesmo problema e tiver alguma duvida…

é isso…

zicky23

bom dia, gostaria de saber como faço para mudar minha conexao para PreparedStatement......

segue abaixo como está agora

package db;

import java.sql.*;
import javax.swing.*;
import java.io.*;

public class ConexaoDB_Principal{
    //pega a unidade instalada
    File pasta = new File(System.getProperty("user.home"));
    String[] disco = pasta.toString().split(":");

    String ip;
    //conexao com FIREBIRD LOCAL
    String driver = "org.firebirdsql.jdbc.FBDriver";
    //String url = "jdbc:firebirdsql:"+ip+":c:\\gerenciador_extratos\\DB.GDB";
    String usuario = "SYSDBA";
    String senha = "masterkey"; /**/
    private Connection conexao;
    public Statement statement;
    public ResultSet resultset;

    public boolean conecta()
    {
      try {
      // Gravando no arquivo
      byte[] buffer = new byte[1000];
      InputStream in;
      try {
         in = new FileInputStream(disco[0]+":\\GesObras\\ConfigIP.txt");
         in.read(buffer);
         String temp = new String(buffer).trim().toString();
         ip = temp;
         in.close();
      } catch (FileNotFoundException e) {
         System.out.println(e);
      }
      catch (IOException e) {
         System.out.println(e);
      }

      }
      catch (Exception ee) {
          System.out.print(ee);
      }
        boolean result = true;
        try
        {
            Class.forName(driver);
            conexao = DriverManager.getConnection("jdbc:firebirdsql:"+ip+":"+disco[0]+":\\GesObras\\db\\log\\DB_LOG.FDB",usuario,senha);
        }
        catch(ClassNotFoundException Driver)
        {
            JOptionPane.showMessageDialog(null, "Driver nao localizado: "+Driver);
            result = false;
            System.exit(0);
        }
        catch(SQLException Fonte)
        {
            JOptionPane.showMessageDialog(null, "Ocorreu um erro ao conectar ao banco de dados, \n confira se o ip e a porta estao configurados corretamente!");
        }
        return result;
    }

    public void desconecta()
    {
        boolean result = true;
        try
        {
            conexao.close();
            JOptionPane.showConfirmDialog(null, "banco fechado");
        }
        catch(SQLException fecha)
        {
            JOptionPane.showMessageDialog(null, "Nao foi possivel "+
                                          "fechar o banco de dados: "+fecha);
            result = false;
        }

    }
    public void executeSQL(String sql)
    {
        try
        {
            statement = conexao.createStatement(
                       ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
            //JOptionPane.showMessageDialog(null, "deu certo a pesquisa");
        }
        catch(SQLException sqlex)
        {
         JOptionPane.showMessageDialog(null, "nao foi possivel " +
                 "executar o comando sql,"+sqlex+", o sql passado foi "+sql);
        }
    }
}

seria só mudar onde tem Statement para PreparedStatement?

valeu

zicky23

Mudei para:

package db;

import java.sql.*;
import javax.swing.*;
import java.io.*;

public class ConexaoDB_Principal{
    //pega a unidade instalada
    File pasta = new File(System.getProperty("user.home"));
    String[] disco = pasta.toString().split(":");

    String ip;
    //conexao com FIREBIRD LOCAL
    String driver = "org.firebirdsql.jdbc.FBDriver";
    //String url = "jdbc:firebirdsql:"+ip+":c:\\gerenciador_extratos\\DB.GDB";
    String usuario = "SYSDBA";
    String senha = "masterkey"; /**/
    private Connection conexao;
    public PreparedStatement statement; // mudei aki para PreparedStatement
    public ResultSet resultset;

    public boolean conecta()
    {
      try {
      // Gravando no arquivo
      byte[] buffer = new byte[1000];
      InputStream in;
      try {
         in = new FileInputStream(disco[0]+":\\GesObras\\ConfigIP.txt");
         in.read(buffer);
         String temp = new String(buffer).trim().toString();
         ip = temp;
         in.close();
      } catch (FileNotFoundException e) {
         System.out.println(e);
      }
      catch (IOException e) {
         System.out.println(e);
      }

      }
      catch (Exception ee) {
          System.out.print(ee);
      }
        boolean result = true;
        try
        {
            Class.forName(driver);
            conexao = DriverManager.getConnection("jdbc:firebirdsql:"+ip+":"+disco[0]+":\\GesObras\\db\\log\\DB_LOG.FDB",usuario,senha);
        }
        catch(ClassNotFoundException Driver)
        {
            JOptionPane.showMessageDialog(null, "Driver nao localizado: "+Driver);
            result = false;
            System.exit(0);
        }
        catch(SQLException Fonte)
        {
            JOptionPane.showMessageDialog(null, "Ocorreu um erro ao conectar ao banco de dados, \n confira se o ip e a porta estao configurados corretamente!");
        }
        return result;
    }

    public void desconecta()
    {
        boolean result = true;
        try
        {
            conexao.close();
            JOptionPane.showConfirmDialog(null, "banco fechado");
        }
        catch(SQLException fecha)
        {
            JOptionPane.showMessageDialog(null, "Nao foi possivel "+
                                          "fechar o banco de dados: "+fecha);
            result = false;
        }

    }
    public void executeSQL(String sql)
    {
        try
        {
            statement = (PreparedStatement) conexao.createStatement( // mudei para PreparedStatement
                       ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
            //JOptionPane.showMessageDialog(null, "deu certo a pesquisa");
        }
        catch(SQLException sqlex)
        {
         JOptionPane.showMessageDialog(null, "nao foi possivel " +
                 "executar o comando sql,"+sqlex+", o sql passado foi "+sql);
        }
    }
}

tá dando esse erro:

Exception in thread "main" java.lang.ClassCastException: org.firebirdsql.jdbc.FBStatement cannot be cast to java.sql.PreparedStatement at db.ConexaoDB.executeSQL(ConexaoDB.java:87) at grafica.Splash.Autent(Splash.java:91) at grafica.Splash.<init>(Splash.java:38) at grafica.Splash.main(Splash.java:87) Java Result: 1

Criado 24 de outubro de 2006
Ultima resposta 28 de fev. de 2012
Respostas 3
Participantes 2