Nos artigos desta série, mostramos os acessos aos bancos de dados através de vários ambientes de desenvolvimento. Exploramos as conexões com Oracle e SQL Server utilizando Delphi, VB .Net e Java através do ADO no Delphi e VB .Net, DbExpress no Delphi e JDBC no Java. Nesta terceira e última parte, apresentaremos os procedimentos para conexão e visualização de dados com o MySQL.

O MySQL dispensa apresentações e se mostra um excelente produto em relação a performance, facilidade de utilização, distribuição, segurança, flexibilidade no conceito multi-plataforma garantindo sua instalação em vários sistemas operacionais. Empresas como Yahoo!, Lucent Technologies, Sony Pictures Digital Entertainment, Motorola, NASA, Silicon Graphics, HP, Xerox, Cisco e inúmeros provedores de acesso e hospedagem para Web utilizam o MySQL. A sua versão atual á a 4.0 release 4.0.12 e está disponível para download no endereço http://www.mysql.com/downloads/. Uma das grandes vantagens do MySQL é sua política de licenciamento e ser “Open Source”. Para os interessados, o código fonte da última versão em desenvolvimento (versão 4.1) está disponível para download em http://www.mysql.com/downloads/mysql-4.1.html. Maiores informações sobre o MySQL podem ser obtidas no site oficial do produto em www.mysql.com.

Tipos de Drivers

Antes de falarmos sobre os ambientes de desenvolvimento e procedimentos de conexão, analisemos os principais “Drivers” ou “Conectores”. Vamos analisar quatro tipos diferentes de Drivers, são eles:

  • MySQL Connector/J
  • MySQL Connector/ODBC
  • .NET modules
  • DbExpress Driver for MySQL

MySQL Connector/J é um driver nativo que converte as chamadas JDBC num protocolo de rede utilizado pelo MySQL, permitindo os desenvolvedores Java implementem programas e applets que acessem uma banco de dados MySQL. Desenvolvido em Java, o MySQL Connector/J é um driver JDBC classe IV, ou seja, acessa diretamente o servidor de banco de dados sem a necessidade de uma aplicação cliente.

A versão atual deste driver é de 50 a 100% mais rápida que as versões anteriores, garantindo maior performance e estabilidade para um número maior de conexões. Suportam “streaming” result sets, obtendo uma quantidade maior de linhas sem utilizar em excesso a memória da estação cliente. Permite a manipulação de BLOB´s com tamanho até dois gigabytes, permite a utilização de campos do tipo Auto-Incremento em ferramentas e mapeamento objeto-relacional (vide artigo sobre o Hibernate na SQL Magazine nº 2) bem como a utilização em serviços EJB (Enterprise Java Beans) e CMP (Container Managed Persistence) que suportam JDBC 3.0.

O download do driver está no site oficial do MySQL nas seguintes versões:

O MySQL Connector/J foi validado e trabalha com várias ferramentas de desenvolvimento e servidores de aplicação. Entre elas podemos citar:

  • Apache's Jakarta Projects (Tomcat, Turbine, Velocity, etc.) — MySQL Connector/J funciona com todas essas ferramentas, e na maioria dos casos é o driver JDBC utilizados nos exemplos que acompanham essas aplicações.
  • JBoss The JBoss Open Source J2EE Application server - MySQL Connector/J works funciona com os BMP e CMP beans neste ambiente .
  • BEA WebLogic — MySQL Connector/J funciona com os BMP e CMP beans bem como servlets e JSPs nesta plataforma J2EE.
  • IBM VisualAge for Java — VisualAge é um ambiente de desenvolvimento Java.
  • IBM WebSphere Application Server 4.0 — MySQL Connector/J funciona com esta plataforma J2EE. BMP, servlets, e JSPs são suportados.
  • Forte for Java e NetBeans — Uma das IDE´s mais utilizadas no mundo. Suporta toda plataforma Java e possui modulos que adicionam ao ambiente de desenvolvimento um editor, ferramentas para auxiliar o trabalho com o código fonte, controle de versões, assistentes para implementação de classes e outras tarefas gerenciáveis.
  • Oracle SQL/J — SQL/J permite a utilização de “SQL Embutido” no código Java e trabalha perfeitamente com o Connector/J.
  • TableGen — TableGen gera de forma automatica classes Java que representam tabelas num banco de dados.

O MySQL Connector/ODBC também conhecido como MyODBC, é um driver que permite a conexão com um banco de dados MySQL utilizando a API ODBC ( Open Database Conectivit ) em todas as versões do Microsoft Windows e algumas plataformas Unix como (Linux, Sun Solaris, HP-UX, IBM AIX e Mac OS X), incluindo algumas aplicações e ambientes de desenvolvimento como o Microsoft Access, Microsoft Excel, e Borland Delphi bem como seu acesso através do ADO .Net. A versão atual destedriver é compatível com a especificação 2.50 do ODBC níve 0 e algumas funcionalidades dos níveis 1 e 2. A versão em desenvolvimento é compatível com a especificação 3.51 do ODBC. Maiores informações sobre a especificação ODBC podem ser obtidas no side da microsoft.

Os .NET modules são drivers implementados por terceiros, em sua maioria pagos, que permitem o acesso nativo a um banco de dados MySQL através da implementação ADO .Net do Microsoft .Net. Entre eles, destaquemos:

  • dbProvider
    Este driver .Net para o MySQL é implementado por terceiros. Este driver requer o registro da versão comercial do MySQL.
  • MySQLDriverCS
    Este driver é gratuito. Desenvolvido em C# mas pode ser utilizado em todas as linguagens compatíveis com o.NET (VB.NET, Managed C++).
  • ByteFX.Data - MySQL ADO.NET data provider
    ByteFX, Inc. implementou e disponibilizou um .NET data provider para o MySQL com código fonte, ou seja 100 % Open Source! Este driver foi desenvolvido por completo em C# code e funciona sem a necessidade e blibliotecas externas com exceção da SharpZipLib, responsável pela compressão de dados entre o driver e o servidor MySQL.
  • Core Lab – MySQL

dbExpress é uma implementação da Borland que permite conexões com RDBMS para aplicações desenvolvidas em Delphi ou Kylix. Este driver ‘traduz’ para o banco de dados todas as chamadas da interface dbExpress, garantindo transparência ao desenvolvimento da aplicação cliente.

A Borland disponibiliza juntamente com a instalação do Delphi 7 ou Kylix, o driver dbExpress para conexão com o MySQL que é o dbexpmysql.dll e no Delphi, na instalação padrão, está na pasta C:\Arquivos de programas\Borland\Delphi7\Bin.

Os drivers dbExpress instalado com o delphi não necessitam de licença para distribuição, podendo ser enviados sem ônus, juntamente com a aplicação desenvolvida.

Um interessante é que na documentação sobre a implementação de drivers dbExpress da Borland, o banco de dados utilizado como exemplo nesta documentação é o MySQL.

Criando o banco de dados de exemplo

Através do MySQL Monitor, que está localizado em C:\mysql\bin\MySQL.Exe, criemos um banco de dados para exemplo deste artigo. Os comandos para criação do banco e dos registros estão na listagem 1 e devem ser executas um por vez na ordem apresentada:

         CREATE DATABASE SQLMAGAZINE;
          USE SQLMAGAZINE;
          CREATE TABLE EMPREGADO 
  (IDEMPREGADO INT NOT NULL,   
   NOME VARCHAR(60),
   SALARIO FLOAT(7,2), 
   PRIMARY KEY(IDEMPREGADO));
  
 INSERT INTO EMPREGADO VALUES (1,’ANTÔNIO CARLOS’,240);
 INSERT INTO EMPREGADO VALUES (2,’MARIA DE LOURDES’,1240);
 INSERT INTO EMPREGADO VALUES (3,’JOSÉ EVERALDO’,1375.27);

listagem 1 - criação do banco de dados exemplo

Conectando com o Delphi utilizando DbExpress

Inicie um novo projeto através do menu ‘File/New/Application’ da barra de menu do Delphi.

No formulário principal, adicione o componente SQLConnection, localizado na paleta de componentes dbExpress conforme a figura 1. Com um duplo clique sobre o SQLConnection, acessa a caixa de diálogo dbExpress Connections e adicione uma nova conexão através do botão ‘+’. Será solicitada, conforme a figura 2, a informação sobre o nome do Driver. Para o exemplo, optaremos pelo MySQL. Na caixa de texto abaixo, digite o nome da conexão conforme a figura 2. Em seguida, é necessária a configuração dos parâmetros referentes ao endereço do servidor em HOSTNAME, nome do banco de dados em DATABASE e dos parâmetros referentes ao login no banco em USER_NAME e PASSWORD, como mostra a figura 3. O HOSTNAME 127.0.0.1 se refere a um banco de dados local e as informações de login são definidas na instalação do banco. Caso você esteja acessando um a servidor na rede, solicite a seu administrador as informações referentes ao login e localização do mesmo.

Após a configuração, adicionaremos alguns componentes para visualização e manutenção dos dados na tela. São eles:

  1. SimpleDataSet: Recebe a instrução SQL, envia para o banco e recebe os dados para serem manipulados. Deve ser ligado ao SQLConection através da propriedade Connection e na Propriedade DataSet.CommandText devemos ‘escrever’ a frase SELECT que irá retornar os dados. Poderemos digitar diretamente a instrução ou usar os assistentes de criação de instruções. Vejamos as instruções nas figuras 4 e 5.
  2. DataSource: Permite a visualização dos dados contidos no SimpleDataSet em controles visuais para serem manipulados pela interface. Deve ser ligado o SimpleDataSet configurado no item 1 através da propriedade DataSet no Object Inspector.
  3. DbGrid: Permite a visualização dos dados direcionados através do DataSource. Deve ser ligado ao DataSource configurado no item 2 através da propriedade DataSource.

Componentes do dbExpress na IDE do Delphi

figura 1– Componentes do dbExpress na IDE do Delphi

Caixa de diálogo para criação da nova conexão

figura 2 – Caixa de diálogo para criação da nova conexão

Configurações da conexão

figura 3 – Configurações da conexão

Configuração do SimpleDataSet

figura 4 – Configuração do SimpleDataSet

Assistente para configuração do CommandText

figura 5 – Assistente para configuração do CommandText

Após todas as configurações, colocar em funcionamento a aplicação com dbExpress é bastante simples. Poucas linhas de código garantem que a conexão seja aberta. Os dados serão retornados pela consulta e exibidos na tela. O componente SimpleDataSet após ser aberto, traz os dados para a aplicação cliente, permitindo que esses sejam manipulados completamente ‘desconectados’ do servidor de banco da dados e, somente depois da conclusão das operações, essas alterações serão enviadas para o servidor.

Os procedimentos implementados são os seguintes:

1) No evento OnCreate do formulário, os componentes SQLConnection e SimpleDataSet são abertos com os respectivos comandos:

SQLConnection.Open;
SimpleDataSet.Open

2) No evento OnClose do formulário criado, os mesmos componentes descritos no passo um

são fechados explicitamente através dos comandos:

  SimpleDataSet.Close;            SQLConnection.Close;

3) A gravação das alterações efetuadas em tela é efetuada através do evento OnClick do

botão Gravar, cujo o componente será inserido na tela e localizado na paleta Standard.

Abaixo, está a implementação do código verificador de alterações pendentes e se existirem,

envia as mesmas para o banco de dados. O código é o seguinte:

 if ( SimpleDataSet.ChangeCount > 0 ) then SimpleDataSet.ApplyUpdates(0);

4) Para cancelar as alterações, basta implementar o evento OnClick do botão de Cancelar

o seguinte código (que também verifica se existem alterações pendentes e cancela as mesmas

caso existam):

   if ( SimpleDataSet.ChangeCount > 0 ) then SimpleDataSet.CancelUpdates;

Conectando com VB .Net com ADO .Net utilizando o Driver MySQLDriverCS

A implementação para acesso ao MySQL utilizando Java é idêntica a utilizada para o acesso ao Oracle e SQL Server. Isso garante total reusabilidade do código para diversos servidores de banco de dados. As únicas diferenças estão no registro do driver e na montagem da String de Conexão. A listagem 2 mostra uma aplicação que abre uma conexão com o servidor MySQL, executa uma instrução SELECT e exibe na tela os dados retornados. Analisando esta listagem, temos:


 01 import java.sql.*;
 02  
 03 public class Principal
 04 { public static void main (String[] args)
 05    { Connection conn = null;
 06     try
 07       {
 08         DriverManager.registerDriver ( new org.gjt.mm.mysql.Driver() );
 09  conn = DriverManager.getConnection("jdbc:mysql://localhost/sqlmagazine?user=Alex_Oak");
 10      }
 11
 12     catch (SQLException e)
 13          { System.out.println ('\n' + "Erro na conexão com o banco.");
 14               e.printStackTrace();
 15               System.exit(1);
 16            }
 17
 18     try
 19         { 
 20         PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM EMPREGADO");
 21         ResultSet rs = pstmt.executeQuery();
 22
 23           while ( rs.next() )
 24           { System.out.println(rs.getInt("IDEMPREGADO") + " - " +                                 
 25                                     rs.getString("NOME") + " - " + rs.getDouble("SALARIO"));
 26           }
 27
 28          pstmt.close();
 29          conn.close();
 30          }
 31     catch (SQLException e)
 32   { System.out.println ('\n' + "Erro ao recuperar dados no banco.");
 33      e.printStackTrace();
 34      System.exit(1);
 35   }
 36 }
 37 }

listagem 2 – Aplicação console para teste da conexão com MySQL

Veremos os comentários sobre as principais linhas do programa:

  • Linha 5: um objeto to tipo Connection que representa a conexão com o banco de dados é declarado.
  • Linha 8: através do método registerDriver do DriverManager, é registrado no JDBC, em tempo de execução, o driver utilizado pela aplicação. Sua representação é feita pela classe org.gjt.mm.mysql.Driver. O Comando new org.gjt.mm.mysql.Driver() cria um obejto referente ao driver que será registrado pelo Driver Manger.
  • Linha 9: é responsável pela conexão através do método getConnection do DriverManager. Este método tem uma Connection String que informa o driver utilizado e o nome ou IP do servidor de banco de dados, seguido do nome do banco e informações do login. No exemplo, a Connection String (ou string de conexão) utilizada para abrir a conexão tem o seguinte formato jdbc:mysql://localhost/sqlmagazine?user=Alex_Oak".
  • Linha 20: O método prepareStateMent “envia” o comando para o banco já compilado e otimizando a resposta quando o comando for executado pela aplicação cliente.
  • Linha 21: Executa o comando e a resposta é Resultset que permite a aplicação manipular os dados resultantes.
  • Linha 28: Fecha explicitamente o Statement preparado no banco de dados, desalojando recursos no servidor.
  • Linha 29: fecha a conexão com o banco de dados.

Conclusão

Ao longo desses três artigos, verificamos muitas semelhanças nas conexões das aplicações com os banco de dados. Essas semelhanças facilitam a vida de quem desenvolve sistemas que acessam diversos banco de dados. Utilizando os drives, gratuitos ou não, efetuamos conexões utilizando um servidor MySQL. Cabe o desenvolvedor estabelecer qual é a melhor solução para os problemas levantados na análise. Contudo, já sabemos: independente da linguagem escolhida, a conexão com banco de dados deve ser considerada incondicionalmente.