BANCO DE DADOS Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciência da Computação Prof. Alexandre Veloso de Matos [email protected] INTRODUÇÃO Um Banco de Dados pode ser considerado: A soma de todos os dados que uma organização possui. Uma coleção de dados, organizada logicamente e gerenciada sob um conjunto unificado de princípios, procedimentos e funcionalidades, que ajuda a garantir a aplicação consistente e a interpretação dos dados em toda a organização No entanto, o que pode ser considerado um produto (resultado) da criação de BDs? APLICAÇÕES DE BD BDs não têm uma finalidade/funcionalidade se aplicações não forem desenvolvidas para extrair informação dos dados É importante, portanto, permitir extrair-se de um BD (que já passou por algumas etapas de preparação) informações Todos precisariam ter conhecimento de uma linguagem de consulta? APLICAÇÕES DE BD O desenvolvimento de uma aplicação de BD é apenas uma forma de capturar, via alguma linguagem de programação, informação que pode ser: Manipulada Processada Exibida APLICAÇÕES DE BD Como BDs são mantidos por SGBDs, é necessário que exista uma estratégia que possibilite a comunicação com o SGBD, apesar do formato utilizado para armazenamento dos dados Em geral, são providos drivers de acesso ACESSO A BDS [JAVA] ACESSO A BDS - JAVA Java, por exemplo, possui uma Application Programming Interface (API) que possibilita o acesso a BDs É um modelo de conexão uniforme Essa API é denominada Java DataBase Connectivity (JDBC) ACESSO A BDS - JDBC De maneira simplificada, JDBC tem 6 funcionalidades: a) b) c) d) e) f) Estabelecer conexão com o banco de dados Executar consultas Receber o conjunto de Resultados das Consultas Executar stored procedures Obter informações sobre o banco de dados, tabelas, visões e stored procedures Executar transações ACESSO A BDS - JDBC A aplicação chama a API JDBC Aplicação A API JDBC carrega o driver que “entende” o SGBD JDBC Driver A aplicação pode se conectar e enviar/receber requisições ao/do SGBD BD ACESSO A BDS - JDBC O que é a JDBC? Consiste em uma biblioteca de recursos implementada em Java Ou seja, disponibiliza classes e interfaces para o acesso ao banco de dados Para cada banco de dados existe uma implementação (drivers) ACESSO A BDS - JDBC Tipos de Drivers Ponte JDBC–ODBC Acesso Nativo Acesso por Middleware ACESSO A BDS - JDBC 5 passos básicos: a) b) c) d) e) Registrar o driver na aplicação Conectar no SGBD Executar comandos SQL Processar o resultado recebido Fechar a conexão Principais recursos do pacote java.sql: DriverManager: responsável por criar uma conexão com o banco de dados Connection: classe responsável por manter uma conexão aberta com o banco de dados Statement: gerencia e executa instruções SQL ResultSet: responsável por receber e apresentar os dados obtidos do banco de dados PASSO 1 - REGISTRO DO DRIVER Sugere-se que o driver seja registrado automaticamente quando a classe (que representa a aplicação) for carregada O driver é, portanto, carregado, em tempo de execução Class.forName("com.mysql.jdbc.Driver"); PASSO 2 – CONEXÃO AO BD Após o registro do driver, é necessário fornecer informações ao DriverManager para realizar a conexão com o Banco de Dados desejado Connection con = DriverManager.getConnection(url, login, senha) jdbc:mysql://localhost:3306/Clinica SOBRE A CONEXÃO A conexão mantém informações importantes sobre o acesso O objeto associado à conexão representa a conexão com o banco de dados Possui métodos que permite gerenciar essa conexão: commit() - executa todas as alterações feitas com o banco de dados pela atual transação. rollback() - desfaz qualquer alteração feita com o banco de dados pela atual transação. close() - libera o recurso que estava sendo utilizado pelo objeto. PASSO 3 - EXECUTAR COMANDOS SQL Para a execução de consultas ao BD é necessário criar um Statement e obter o resultado através de um ResultSet Statement stmt =con.createStatement(); ResultSet rs = stmt.executeQuery (“select * from medicos”); Na maioria dos casos, o resultado é armazenado em um ResultSet e pode ser percorrido com métodos definidos nesta classe. SOBRE A EXECUÇÃO DE INSTRUÇÕES SQL Os métodos de Statement é que permitem a execução de instruções SQL: executeUpdate() – executa instruções SQL do tipo: INSERT, UPDATE e DELETE executeQuery() – executa instruções SQL de busca de dados, do tipo: SELECT close() - libera o recurso que estava sendo utilizado pelo objeto SOBRE O PROCESSAMENTO DO RESULTADO Os métodos de ResultSet permitem manipular o resultado da operação SQL: next() - move o cursor para a próxima linha de dados, já que o conjunto de dados retornados pela consulta SQL é armazenado como em uma tabela close() - libera o recurso que estava sendo utilizado pelo objeto getString(String columnName) - recupera o valor da coluna informada como parâmetro, da linha atual do conjunto de dados recebidos pelo objeto ResultSet EXEMPLO Paciente ( #cdPaciente, nmPaciente, deEndPaciente, deTelPaciente, dtNasc, &cdPlanoSaude) public void connectToAndQueryDatabase(String username, String password) throws Exception{ Class.forName ("org.gjt.mm.mysql.Driver"); Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/Clinica", username, password); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT nmPaciente, deEndPaciente, deTelPaciente FROM Paciente"); while (rs.next()) { String nome = rs.getInt(" nmPaciente "); String ender = rs.getString(" deEndPaciente "); String fone = rs.getString(" deTelPaciente "); } } ACESSO A BDS [PHP] ACESSO A BDS - PHP PHP possui suporte a distintos BDs relacionais (Adabas, Firebird, Oracle, FrontBase, PostgreSQL, MSSQL, mSQL, IBM DB2, MySQL, ...) Algumas ferramentas WAMP possuem suporte nativo a alguns (principalmente código aberto), no entanto: Algumas configurações adicionais podem ser necessárias em php.ini ACESSO A BDS - PHP Assim como na manipulação de qualquer BD, existem algumas atividades cotidianas: Conexão ao BD Seleção do BD Manipulação de dados (tabelas) Finalização da conexão ACESSO A BDS - PHP <?php $myhost="127.0.0.1"; $myporta="3306"; $myuser="root"; $mysenha=""; $mybanco=“musica"; $myhosteporta=$myhost . ":" . $myporta; $con=mysql_connect($myhosteporta,$myuser,$mysenha) or die("Não foi possível a conexao, erro: ".mysql_error()); mysql_select_db($mybanco,$con) or die("Não conseguiu selecionar o banco, erro: ".mysql_error()); echo "===>conectado ao BD ".$mybanco." <br>"; ?> ACESSO A BDS - PHP Para executar os exemplos, consideraremos a criação da seguinte tabela: use musica; DROP TABLE IF EXISTS usuarios; CREATE TABLE usuarios ( idusuario int(10) unsigned NOT NULL auto_increment, login varchar(20) NOT NULL, senha varchar(32) NOT NULL, PRIMARY KEY (idusuario)); ACESSO A BDS - PHP E também a inserção dos seguintes usuários: insert into usuarios (login, senha) values ("andre", md5("senha")), ("maria", md5("senha")), ("alex", md5("senha")); RECUPERAÇÃO DE DADOS As variáveis de um formulário html são enviadas via algum método de transferência de dados (POST ou GET) Conforme o método usado, as variáveis ficam disponíveis em vetores globais ($_POST ou $_GET) Para facilitar, a conexão ao BD pode ser incorporado ao código do script através de: require “conexao.php” RECUPERAÇÃO DE DADOS <?php import_request_variables("gP"); require "conexao.php"; $sql = "SELECT idusuarios FROM usuarios where login = '$login' and senha = '" . md5($senha) . "'"; $resultado = mysql_query("$sql",$con); $existe = mysql_num_rows($resultado); if ($existe) { echo "Ok, pode acessar o sistema!"; } else { echo "Amigo, os dados digitados não conferem! <BR><BR> <INPUT TYPE=\"button\" VALUE=\"Tentar Novamente\" onClick=\"history.go(-1)\">"; } ?> RECUPERAÇÃO DE DADOS RECUPERAÇÃO DE DADOS RECUPERAÇÃO DE DADOS Aplicações possuem a necessidade de investigar inúmeras linhas – tratamento dos dados recuperados. Instruções associadas: mysql_fetch_assoc($resultado); // índice do array é o nome campo mysql_fetch_row($resultado); // índice numérico mysql_fetch_array($resultado); // array com índice número e campo RECUPERAÇÃO DE DADOS <?php require "conexao.php"; $sql = "SELECT * FROM usuarios"; $resultado = mysql_query("$sql",$con); echo "<b>Usuários do BD ".$mybanco."</b><br>"; while ($linha = mysql_fetch_assoc($resultado)) { $id = $linha["idusuarios"]; $login = $linha["login"]; echo "<b>$id:</b> $login <br>"; } mysql_close($con); ?> RECUPERAÇÃO DE VÁRIOS DADOS <?php require "conexao.php"; $sql = "SELECT * FROM usuarios"; $resultado = mysql_query("$sql",$con); echo "<b>Usuários do BD ".$mybanco."</b><br>"; while ($linha = mysql_fetch_assoc($resultado)) { $id = $linha["idusuarios"]; $login = $linha["login"]; echo "<b>$id:</b> $login <br>"; } mysql_close($con); ?> INSERÇÃO DE DADOS <?php import_request_variables("gP"); require "conexao.php"; $user = $_POST["login"]; $senha = $_POST["senha"]; $sql = "INSERT INTO usuarios (login,senha) values ('$user', md5('$senha'));"; $resultado = mysql_query("$sql",$con) or die("Falha na execução da consulta"); header('Location: http://localhost/html/Internet_Music'); ?>