MySQL e ODBC - Ta lento

6 respostas
T

Pessoal,

alguem ai usa o MySql, instalou o driver ODBC, depois conectou
a aplicação via JDBC - ODBC - MySQL?

Pode ser(alías, e bem provável) que esteja faltando eu fazer algo,
mas to usando a cláusula LIMIT pra poder fazer paginação aqui na
lista, e tá demorando uns 3 s!!!

até pra buscar o próximo registro ta demorando…

public void proximoRegistro() {
        ResultSet proxReg, proxCod;
        try {
            int currentCod = Integer.parseInt(FieldCod.getText());
            proxReg = Banco.query("select * from CADCLI where COD > "+currentCod+" LIMIT 1);
            proxReg.beforeFirst();
            if (proxReg.next()) {
                 abrirRegistro(proxReg);
            }
        } catch (Exception exc) {
            JOptionPane.showMessageDialog(null,exc.getMessage());
        }
    }

To postando aqui pq me disseram que qdo faço isso, o Banco de Dados
para apos obter o 1 registro (ou tqos eu determinar no limite), e nao sai varre tudo pra depois filtrar os primeiros…

Algume pode me confirmar isso?

[]s

F.L
tudo pra depois pegar o primeiro

6 Respostas

R

Pq vc esta usando ODBC, ao inves da conexao nativa ao banco?

Rafael

T

Olá rafael, como sempre me ajudando…

Cara, por preguiça mesmo, tava so querendo dar uma olhada no mysql

mas olha o que eu fazia no Access e voava de rapido…

public void proximoRegistro() {
        ResultSet proxReg, proxCod;
        try {
            int currentCod = Integer.parseInt(FieldCod.getText());
            proxCod = Banco.query("select MIN(COD) from CADCLI where COD > "+currentCod);
            proxCod.beforeFirst();
            if (proxCod.next()) {
                proxReg = Banco.query("select * from CADCLI where COD="+proxCod.getInt(1));
                abrirRegistro(proxReg);
            }
        } catch (Exception exc) {
            JOptionPane.showMessageDialog(null,exc);
        }
    }
    
    public void registroAnterior() {
        ResultSet prevReg, prevCod;
        try {
            int currentCod = Integer.parseInt(FieldCod.getText());
            prevCod = Banco.query("select MAX(COD) from CADCLI where COD < "+currentCod);
            prevCod.beforeFirst();
            if (prevCod.next()) {
                prevReg = Banco.query("select * from CADCLI where COD="+prevCod.getInt(1));
                abrirRegistro(prevReg);
            }
        } catch (Exception exc) {
            JOptionPane.showMessageDialog(null,exc);
        }
    }

No MySql ficou super lento… usando o mesmo codigo, sem limit…
com certeza e algo do mysql, pq demora indiferente do nº de reg na table
Tava usando ODBC no access tb (claro)…

A

Ja tentou usar o Connector / J

Ai vai: http://dev.mysql.com/downloads/connector/j/3.1.html

Falow

R

tyrael:
Olá rafael, como sempre me ajudando…

Cara, por preguiça mesmo, tava so querendo dar uma olhada no mysql

hehee… para voce ver que o barato pode sair extremamente caro. O trabalho que vc teve de configurar o ODBC foi maior que conectar nativamente no MySQL. Basta o codigo abaixo para voce registrar o driver (o que precisa ser feito uma unica vez quando vc roda a aplicacao) e pegar a conexao:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/nome_db?user=usuario&password=senha");

Somente isso. Ai basta vc colocar o mysql-connector-j-xxx.jar no classpath e rodar a aplicacao.

Rafael

T

Caramba, rafael, valeu mais uma vez!!!
Cara, tô te devendo umas 4 já…

Eu sabia que ODBC lerdava a parada toda, mas nao TANTO!!!
Voou com o acesso nativo.

Valeu, cara, de novo! 8)

[]s

F.L

R

Rafael Steil:
tyrael:
Olá rafael, como sempre me ajudando…

Cara, por preguiça mesmo, tava so querendo dar uma olhada no mysql

hehee… para voce ver que o barato pode sair extremamente caro. O trabalho que vc teve de configurar o ODBC foi maior que conectar nativamente no MySQL. Basta o codigo abaixo para voce registrar o driver (o que precisa ser feito uma unica vez quando vc roda a aplicacao) e pegar a conexao:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/nome_db?user=usuario&password=senha");

Somente isso. Ai basta vc colocar o mysql-connector-j-xxx.jar no classpath e rodar a aplicacao.

Rafael

Estranho que aqui no meu ja está sendo feito a conexao desta maneira.
Quando está localhost é rápido, mas em rede ´emuito lento.

segue código:

package br.com.bb.proagro.modelo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {

	public Connection getConnection() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
	
			connection = DriverManager.getConnection("jdbc:mysql://10.99.253.115:3306/banco", "user","senha");

		} catch (SQLException e) {
			System.out.println("Erro ao conectar no banco de dados.");
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			System.out.println("Erro ao instanciar classe de conexão");
			e.printStackTrace(); 
		}
		return this.connection;
	}

}

Alguém sabe porque?

Criado 15 de março de 2005
Ultima resposta 31 de ago. de 2010
Respostas 6
Participantes 4