Qual a melhor conexão Aplicativo Desktop X DB Firebird

6 respostas
zicky23

Boa tarde pessoal, estou tentando otimizar meu sistema, que trabalha com banco de dados Firebird em uma rede interna. Gostaria de saber qual a melhor maneira de fazer uma conexão para que seja rápida e segura!??

estou usando da seguinte maneira:

package db;

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

public class ConexaoDB
{
    //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 usuario = "SYSDBA";
    String senha = "masterkey"; /**/
    private Connection conexao;
    public Statement statement; //aki ainda estou usando Statement, mtos falam q é melhor e mais rapido usar 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"); //aki pego o ip do server
         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\\DB.FDB",usuario,senha); //aki conecto
        }
        catch(ClassNotFoundException Driver)
        {
            JOptionPane.showMessageDialog(null, "Driver nao localizado: "+Driver);
            result = false;
        }
        catch(SQLException Fonte)
        {
            //JOptionPane.showMessageDialog(null, "Deu erro na conexao com a fonte de dados: "+Fonte);
        JOptionPane.showMessageDialog(null, "erro ao tentar conectar, verifique as configurações de conexão");
            result = false;
            System.exit(0);
        }
        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);
        }
    }
}

creio que nao seja a melhor e mais rápida maneira de conectar....

alguém pode me dar uma ajuda??

valeu

6 Respostas

drsmachado

Por experiência
CallableStatement é mais rápido que PreparedStatement.
PreparedStatement é mais rápido que Statement.

zicky23

Vou dar uma estuda, se tiver algum exemplo fico grato. valeu

zicky23

como eu faço aki com CallableStatement, empaquei aki

package model;

import db.CalllableStatement;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

class ServicoDao{

    private List<Servicos> lista = new ArrayList<Servicos>();
    CalllableStatement calllableStatement = new CalllableStatement();
    Connection connection = calllableStatement.createConnection();

    public List<Servicos> ServicoDao() {

        try {
            int codSolicitacao = 0,idsituacao = 0,numeroCasaContrib = 0;
            java.sql.Timestamp datahora = null;
            Boolean sel = true;
            String nomeContrib = null,nomeSetor = null,foneContrib = null,ruaContrib = null,bairroContrib = null,nomeSituacoes = null,servico = null,justificativa = null;

            CallableStatement conn = connection.prepareCall(
                        "SELECT S.id_solicitacao,S.SEL,C.nome_contribuinte,C.fone,R.nome_ruas,S.numero,B.nome_bairros,SE.nome_setores,SIT.nome_situacoes,SIT.id_situacao,S.data_hora,S.servico,S.justificativa"
                        +" FROM SOLICITACOES S"
                        +" LEFT JOIN CONTRIBUINTE C ON S.id_contribuinte=C.id_contribuinte"
                        +" LEFT JOIN SETORES SE ON S.id_setor=SE.id_setor"
                        +" LEFT JOIN SITUACOES SIT ON S.id_situacao=SIT.id_situacao"
                        +" LEFT JOIN RUAS R ON S.id_rua=R.id_ruas"
                        +" LEFT JOIN BAIRROS B ON S.id_bairros=B.id_bairros ORDER BY S.ID_SOLICITACAO DESC");

            while (cs.) {

                Servicos serv = new Servicos(nomeContrib, foneContrib, ruaContrib, numeroCasaContrib, nomeSituacoes, sel, codSolicitacao, nomeSetor, bairroContrib, datahora, servico, justificativa, idsituacao);

                serv.setNomeContrib(conn.resultset.getString("nome_contribuinte"));
                serv.setFoneContrib(conn.resultset.getString("fone"));
                serv.setRuaContrib(conn.resultset.getString("nome_ruas"));
                serv.setNumeroContrib(conn.resultset.getInt("numero"));
                serv.setNomeSituacoes(conn.resultset.getString("nome_situacoes"));
                serv.setSel(conn.resultset.getBoolean("SEL"));
                serv.setCodSolicitacao(conn.resultset.getInt("id_solicitacao"));
                serv.setNomeSetor(conn.resultset.getString("nome_setores"));
                serv.setBairroContrib(conn.resultset.getString("nome_bairros"));
                serv.setDataHora(conn.resultset.getTimestamp("data_hora"));
                serv.setServico(conn.resultset.getString("servico"));
                serv.setJustifivatica(conn.resultset.getString("justificativa"));
                serv.setIdSituacao(conn.resultset.getInt("id_solicitacao"));

                lista.add(serv);
            }

            conn.resultset.close();
        }
        catch (SQLException e) {
            System.out.println(e);
        }
        return lista;

    }
}
JuniorMaia

CallableStatement com postgres é o que há ;x

zicky23

uso firebird…

como faço uma conexao preparedStatement? e depois como faço consulta na DAO?

zicky23

alguem tem alguma sugestão?

Criado 4 de maio de 2012
Ultima resposta 14 de mai. de 2012
Respostas 6
Participantes 3