1 Curso de Linguagem Java Marcos Mendes 2º Semestre - 2007
Mar 14, 2016
1
Curso de Linguagem Java
Marcos Mendes
2º Semestre - 2007
2
Conectividade de Banco de Dados(JDBC)
3
Conectividade de Banco de Dados
Arquitetura JDBC Introdução à Linguagem SQL Configuração ODBC Etapas da Programação JDBC Uso do MySQL API – JDBC Manutenção de Tabelas de Banco de Dados
4
Conectividade de Banco de Dados
Arquitetura JDBCPrograma Java
API JDBC(java.sql)
Driver JDBC
BancoDe Dados
Comandos SQL
5
Introdução à Linguagem SQL Consulta
SELECT
Alteração INSERT INTO UPDATE DELETE FROM
6
Introdução à Linguagem SQL SELECT
SELECTSELECT colunas FROMFROM tabelas WHEREWHERE critério Exemplos:
SELECT * FROM clienteSELECT Nome, Tel FROM ClienteSELECT Nome FROM Cliente WHERE Estado = ‘SP’ SELECT Nome, Tel FROM Cliente WHERE Nome LIKE ‘João
%’ SELECT Cliente.Nome, Pedido.NumPed FROM Cliente,
Pedido WHERE Cliente.CodCli = Pedido.CodCli
7
Introdução à Linguagem SQL INSERT INTO
INSERT INTOINSERT INTO tabela (nomeCol1, nomeCol2...) VALUESVALUES (valor1, valor2...)
Exemplos:INSERT INTO Cliente ( CodCli, Nome ) VALUES ( ‘001’,
‘CIM Alcina’ )
INSERT INTO Pedido ( NumPed, Data ) VALUES ( ‘031/01’, TO_DATE (’13-MAR-2001’, ‘DD-MON-YYYY’ ) )
8
Introdução à Linguagem SQL UPDATE
UPDATEUPDATE tabela SETSET nomeCol1 = valor1, nomeCol2 = valor2... WHEREWHERE critério
Exemplos:UPDATE Pedido SET Preço = Preço * 1.1UPDATE Pedido SET Preço = Preço * 0.85
WHERE CodProd = ‘XYZ’
9
Introdução à Linguagem SQL DELETE FROM
DELETEDELETE FROMFROM tabela WHEREWHERE critério
Exemplos:DELETE FROM Cliente WHERE CodCli = ‘001’
DELETE FROM Pedido WHERE Data < TO_DATE (’13-MAR-2001’, ‘DD-MON-YYYY’ )
10
Mapeamento java.sql.Types para Java
long BIGINT
java.lang.String VARCHAR java.lang.String CHAR java.math.BigDecimal NUMERIC java.math.BigDecimal DECIMAL double DOUBLE double FLOAT float REAL
int INTEGER short SMALLINT byte TINYINT boolean BIT
Tipo JavaTipo JavaTipo SQL Tipo SQL (java.sql.Types)(java.sql.Types)
11
Mapeamento java.sql.Types para Java (cont.)
byte[ ] BINARY
java.sql.Struct STRUCT java.sql.Ref REF java.sql.Array ARRAY java.sql.Clob CLOB java.sql.Blob BLOB byte[ ] LONGVARBINARY byte[ ] VARBINARY
java.sql.Timestamp TIMESTAMP java.sql.Time TIME java.sql.Date DATE java.lang.String LONGVARCHAR
Tipo JavaTipo JavaTipo SQL Tipo SQL (java.sql.Types)(java.sql.Types)
12
Conectividade de Banco de Dados
Configuração ODBC ( Windows )Painel de Controle / Fontes de Dados ODBC (32
bits)Você deve configurar os seguintes itens: Driver Nome da Fonte de Dados Banco de Dados correspondente
Opcionalmente definir: Nome de Logon Senha de acesso
13
Conectividade de Banco de Dados
Etapas da Programação JDBC1. Importar java.sql.*2. Carregar Driver JDBC3. Especificar um Banco de Dados4. Abrir uma conexão com o Banco de
Dados5. Criar um Statement (comando)6. Submeter um comando SQL7. Receber os resultados
14
Conectividade de Banco de Dados
Etapa 1 – Importar o Pacote java.sqlimport java.sql.*;import java.sql.*;
Etapa 2 – Carregar Driver JDBC (Depende do Banco de Dados) Carga dinâmica da classe com o método Class.forName:
Class.forName ( “sun.jdbc.odbc.JdbcOdbcDriver” );Class.forName ( “sun.jdbc.odbc.JdbcOdbcDriver” ); Instanciação de um objeto para forçar a carga da classe:
new sun.jdbc.odbc.JdbcOdbcDriver ( ); Atribuição a variáveis do sistema com a opção –D:
java –Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver programa
15
Conectividade de Banco de Dados
Etapa 3 – Criar uma url de conexão (Depende do Banco de Dados)
Especifica-se um banco de dados através de uma url no seguinte formato:jdbc:subprotocol:subnameonde: jdbc – Protocolo jdbc.
subprotocol – Mecanismo de conexãosubname – Fonte de Dados
Exemplo: String url = “jdbc:odbc:String url = “jdbc:odbc:db1db1”;”;
Etapa 4 – Abrir ConexãoConnection con = DriverManager.getConnection ( url, “user”, Connection con = DriverManager.getConnection ( url, “user”,
“senha” );“senha” );
Fonte de Dados
16
Conectividade de Banco de Dados
Etapa 5 – Criar um Statement (comando)
Statement stmt = con.createStatement ( );Statement stmt = con.createStatement ( );
Etapa 6 – Submeter um comando SQLNeste exemplo, iremos submeter uma query.
String query = “SELECT * FROM tabela”;String query = “SELECT * FROM tabela”;
ResultSet rs = stmt.executeQuery ( query );ResultSet rs = stmt.executeQuery ( query );
17
Conectividade de Banco de Dados
Etapa 7 – Receber os resultadosNo caso de uma query, o resultado é na forma de um conjunto de linhas (registros) manipulados por métodos da interface ResultSet. Por exemplo, para exibir as linhas deste conjunto, percorre-se todas as linhas através do método next ( ).Resultset rs = stmt.executeQuery ( query );Resultset rs = stmt.executeQuery ( query );while ( rs.next ( ) ) {while ( rs.next ( ) ) {// primeira coluna// primeira colunaSystem.out.println ( rs.getString( 1 ) );System.out.println ( rs.getString( 1 ) );// segunda coluna// segunda colunaSystem.out.println ( rs.getString( 2 ) );System.out.println ( rs.getString( 2 ) );}}
18
Conectividade de Banco de Dados
import java.sql.*;public class Conexao {
public static void main ( String args [ ] ) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:fonteDadosjdbc:odbc:fonteDados"; Connection con = DriverManager.getConnection(url, "usuáriousuário", "senhasenha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") ); } } catch (Exception e) { System.out.println ( e ); }}
}
Programa exemplo para testar uma conexão.Exibe os dados de
uma tabela
Usando uma fonte de dados ODBC.
19
Conectividade de Banco de Dados
import java.sql.*;public class Conexao {
public static void main ( String args [ ] ) { try { Class.forName("com.mysql.jdbc.Drivercom.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/nomeBancojdbc:mysql://127.0.0.1:3306/nomeBanco"; Connection con = DriverManager.getConnection(url, "usuáriousuário", "senhasenha"); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") ); } } catch (Exception e) { System.out.println ( e ); }}
}
Programa exemplo para testar uma conexão.Exibe os dados de
uma tabela
Usando o MySQL.
20
Conectividade de Banco de Dados
import java.sql.*;public class Conexao {
public static void main ( String args [ ] ) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDrivercom.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://127.0.0.1;" + "jdbc:sqlserver://127.0.0.1;" + "databaseName=nomeBanco;" + "databaseName=nomeBanco;" + "user=usuário;password=senha"user=usuário;password=senha""; Connection con = DriverManager.getConnection(url); Statement st = con.createStatement ( ); String sql = "SELECT * FROM nomeTabelanomeTabela ORDER BY nomeCamponomeCampo"; ResultSet rs = st.executeQuery ( sql ); while ( rs.next() ) {System.out.println( rs.getString(2) + rs.getString("nomeCamponomeCampo") ); } } catch (Exception e) { System.out.println ( e ); }}
}
Programa exemplo para testar uma conexão.Exibe os dados de
uma tabela
Usando o SQLServer2005.
21
Usando o MySQLOs tópicos a seguir que dizem respeito ao MySQL foram baseados na seguinte bibliografia: Beginning PHP 4 Programando
Wankyu Choi, Allan Kent, Chris Lea, Ganesh Prasad e Chris Ullman.
Makron Books – Wrox Press SQL Magazine
Edição 1 – Ano 1 SGBD no linux: MySQL por Clementino Leal
Java Magazine Edição 7 – Ano 1 Bancos de Dados Livres por Fernando Lozano
22
Instalação do MySQL (no Windows)
O MySQL pode ser obtido no site http://www.mysql.comhttp://www.mysql.com
Descompacte o arquivo mysql-4.0.16-win.zipmysql-4.0.16-win.zip em um diretório qualquer como c:\mysqlinstc:\mysqlinst
Execute o arquivo setup.exesetup.exe, escolha o diretório padrão c:\mysqlc:\mysql e a instalação típicainstalação típica
Abra uma janela do DOS e vá para o diretório c:\c:\mysql\binmysql\bin
Execute o comando winmysqladmin.exewinmysqladmin.exe para que o servidor seja carregado. Na primeira execução desse programa será pedido um nome de usuário e senha.
23
Criação de banco de dados com MySQL Inicie o cliente MySQL monitor:
c:\mysql\bin> mysql –umysql –u<usuário> -p-p<senha> Crie um banco de dados:
mysql > create databasecreate database pessoal; Torne o banco de dados ativo:
mysql > useuse pessoal; Crie uma tabela:
mysql > create tablecreate table agenda (-> id INT NOT NULL AUTO_INCREMENTINT NOT NULL AUTO_INCREMENT,-> nome VARCHARVARCHAR(30),-> telefone VARCHARVARCHAR(30),-> PRIMARY KEYPRIMARY KEY (id)) ;
Insira alguns registros:mysql > INSERT INTOINSERT INTO agenda VALUESVALUES (1, “Maria”, “4444-4444”) ;
Exiba os registros inseridos:mysql > SELECT * FROMSELECT * FROM agenda ORDER BYORDER BY nome ;
Encerre o cliente:mysql > exitexit;
24
Principais tipos de dados no MySQL
AAAAMMDDhhmmssTimestamp TIMESTAMPAAAA-MM-DD hh:mm:ss
Data e hora DATETIMEAAAA-MM-DDData DATEIgual a DOUBLEFlutuação
String DECIMAL
±2.225x10-308 a ±1.798x10+308
Flutuante dupla DOUBLE / REAL
±1.176x10-38 a ±3.403x10+38
Flutuante simples
FLOAT-263 a 263 - 1Inteiro grande BIGINT-27 a 27 - 1Int. muito peq. TINYINT-231 a 231 - 1Inteiro normal INTIntervalo/FormatoIntervalo/FormatoDescriçãoDescriçãoTipo de Tipo de
dadodado
25
Principais tipos de dados no MySQL (cont.)
De 0 bytes a 4MB de extensão
Campo de texto longo
LONGTEXT
De 0 65.535 bytes de extensão
Campo de texto
TEXT
De 0 bytes a 4MB de extensão
BLOB de tamanho grande
LONGBLOB
De 0 65.535 bytes de extensão
Objeto binário grande
BLOB
De 0 a 255 caracteres
String de tamanho variável
VARCHAR
De 0 a 255 caracteres
String de tamanho fixo
CHARIntervalo/FormatoIntervalo/FormatoDescriçãoDescriçãoTipo de Tipo de
dadodado
26
Principais comandos do MySQL monitorOs comandos devem ser finalizados com “;” CREATE DATABASECREATE DATABASE
Cria um banco de dados. DROP DATABASEDROP DATABASE
Apaga um banco de dados CREATE TABLECREATE TABLE
Cria uma tabela no banco de dados ativo. SHOW DATABASESSHOW DATABASES
Exibe uma lista dos bancos de dados ativos. USEUSE
Seleciona um banco de dados como ativo. SHOW TABLESSHOW TABLES
Exibe as tabelas do banco de dados ativo. EXITEXIT
Encerra o monitor.Além dos comandos SQL padrão.
27
Conexão com MySQL Instale o driver Connector/J descompactando o arquivo:
mysql-connector-java-3.1.0-alpha.zipmysql-connector-java-3.1.0-alpha.zip, será criado um diretório com o mesmo nome.
Inclua o arquivo mysql-connector-java-3.1.0-mysql-connector-java-3.1.0-alpha.jaralpha.jar no Classpath.
Defina o driver em Class.forName ( ) como:"com.mysql.jdbc.Drivercom.mysql.jdbc.Driver"
Defina a URL de conexão como: "jdbc:mysql://127.0.0.1:3306/jdbc:mysql://127.0.0.1:3306/banco"onde banco é o nome do banco de dados.
28
Acesso a dados no MySQL com Eclipse Para se executar uma aplicação que acesse um banco
de dados MySQL no Eclipse é necessário que se adicione o arquivo mysql-connector-java-3.1.0-mysql-connector-java-3.1.0-alpha.jaralpha.jar no classpath do Eclipse. Para tanto, no Eclipse, Selecione o menu "ProjectProject" opção "PropertiesProperties", clique em "Java Build PathJava Build Path", selecione a aba "LibrariesLibraries", clique no botão "Add Add External Jars...External Jars..." selecione o arquivo mysql-mysql-connector-java-3.1.0-alpha.jarconnector-java-3.1.0-alpha.jar no diretório onde o driver Connector/J foi instalado, clique em "abrirabrir" e finalmente clique em "okok".
29
Usando o Apache Derby Baixe o pacote de distribuição bin do Derby na página:
http://db.apache.org/derby/derby_downloads.html Extraia o pacote baixado no diretório raiz. Renomeie a pasta de instalação para “derby” Adicione o diretório “derby\bin” à variável PATH Mais informações para instalação:
http://db.apache.org/derby/docs/dev/pt_BR/getstart/
30
Exercício Criar uma interface que grave registros
em uma tabela
Agenda
Nome:
Telefone:
Gravar
31
Comandos JDBC (java.sql.Statement) Consulta
StatementStatement st = con.createStatementcreateStatement( );String sql = "SELECT * FROM tabela WHERE codigo =" + x;ResultSet rs = st.executeQueryexecuteQuery( sql );
InclusãoStatementStatement st = con.createStatementcreateStatement( );String sql = "INSERT INTO tabela (nome, cargo) " +"VALUES ( ‘ ‘ "+ vNome + " ‘ , ‘ "+ vCargo + " ‘ ) ";int res = st.executeUpdateexecuteUpdate( sql );
32
Comandos preparados JDBC (java.sql.PreparedStatement) Consulta
String sql = "SELECT * FROM tabela WHERE codigo = ? "; PreparedStatementPreparedStatement pst = con.prepareStatementprepareStatement( sql );pst.setIntsetInt (1, x);ResultSet rs = pst.executeQueryexecuteQuery( );
InclusãoString sql = "INSERT INTO tabela (nome, cargo) " + "VALUES ( ?, ?) ";PreparedStatementPreparedStatement pst = con.prepareStatementprepareStatement( sql );pst.setStringsetString (1, vNome);pst.setStringsetString (2, vCargo);int res = pst.executeUpdateexecuteUpdate( );
33
Conjuntos de Resultados ( ResultSet ) Os valores que definem o tipo de um ResultSetResultSet
são especificados no método createStatement ( ) createStatement ( ) ou no método prepareStatement ( ) prepareStatement ( )
Valores de Tipos de conjuntos TYPE_FORWARD_ONLYTYPE_FORWARD_ONLY
Conjunto de resultados não rolável. TYPE_SCROLL_INSENSITIVETYPE_SCROLL_INSENSITIVE
Conjunto de resultados rolável, mas não sensível às alterações do banco de dados.
TYPE_SCROLL_SENSITIVETYPE_SCROLL_SENSITIVEConjunto de resultados rolável e sensível às alterações do banco de dados.
Valores de Concorrência de conjuntos CONCUR_READ_ONLYCONCUR_READ_ONLY
Conjunto de resultado apenas para leitura. CONCUR_UPDATABLECONCUR_UPDATABLE
Conjunto de resultado atualizável.
JDBC 2.0
34
API - JDBC Interface ConnectionConnection
void closeclose ( )Fecha uma conexão.
void commitcommit ( )Efetiva transação.
Statement createStatementcreateStatement ( )Cria um comando.
PreparedStatement prepareStatementprepareStatement (String sql)Cria um comando preparado.
void rollbackrollback ( )Cancela transação.
void setAutoCommitsetAutoCommit ( boolean b )Define a forma de efetivação dos dados.
35
API - JDBC Classe DriverManagerDriverManager
Connection getConnectiongetConnection ( String url ) Connection getConnectiongetConnection ( String url, String usuário,
String senha )Obtém uma conexão com uma fonte de dados.
Interface StatementStatement void closeclose ( )
Encerra um comando. boolean executeexecute ( )
Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização.
ResultSet executeQueryexecuteQuery ( String comando )Executa um comando de pesquisa e retorna um resultset.
int executeUpdateexecuteUpdate ( String comando )Executa um comando de atualização e retorna o número de linhas atualizadas.
36
API - JDBC Interface PreparedStatementPreparedStatement
void clearParametersclearParameters ( )Limpa os valores dos parâmetros do comando.
boolean executeexecute ( )Executa o comando e retorna true se o resultado for um resultset ou false se for um contador de atualização.
ResultSet executeQueryexecuteQuery ( )Executa o comando de pesquisa e retorna um resultset.
int executeUpdateexecuteUpdate (String sql)Executa o comando de atualização e retorna a quantidade de linhas atualizadas.
void setXXXsetXXX ( int i, XXX x )Ajusta o valor do parâmetro ii com o valor de xx.
37
API - JDBC Interface ResultSetResultSet
boolean absoluteabsolute ( int row )Move o cursor para uma determinada linha.
void afterLastafterLast ( )Move o cursor para o final do ResultSet.
void beforeFirstbeforeFirst ( )Move o cursor para o início do ResultSet.
void cancelRowUpdatescancelRowUpdates ( )Cancela as atualizações feitas na linha atual.
void closeclose ( )Fecha o ResultSet.
38
API - JDBC void deleteRowdeleteRow ( )
Exclui uma linha. boolean firstfirst ( )
Move o cursor para a primeira linha do ResultSet. XXX getXXXgetXXX ( int coluna )
Retorna o valor de uma coluna da linha corrente.Onde XXX é tipo de dado.
int getRowgetRow ( )Retorna o número da linha corrente.
void insertRowinsertRow ( )Insere o conteúdo da linha de inserção no banco de dados.
boolean isAfterLastisAfterLast( )Indica se o cursor está após a última linha do ResultSet.
39
API - JDBC boolean isBeforeFirstisBeforeFirst( )
Indica se o cursor está antes da primeira linha do ResultSet. boolean lastlast ( )
Move o cursor para a última linha do ResultSet. void moveToInsertRow ( )
Move o cursor para a linha de inserção boolean nextnext ( )
Move o cursor para a próxima linha do ResultSet. boolean previousprevious ( )
Move o cursor para a linha anterior do ResultSet. boolean relativerelative ( int n )
Move o cursor n linhas, para a frente se n for positivo, ou para trás se n for negativo.
void updateXXXupdateXXX (int coluna, XXX dado )Define o valor de uma coluna na linha corrente.Onde XXX é o tipo de dado.
40
Exercício Criar um simples cadastro de
funcionáriosCadastro de Funcionários
Nome:
Cargo:
Salário:
Primeiro Anteri
orPróximo Último
Novo Alterar Excluir Sair
Código:
xxx