UFG - Instituto de Informática Curso: Sistemas de Informação Arquitetura de Software Prof.: Fabrízzio A A M N Soares [email protected] Aula 6.1 – Revisão de Banco de Dados (SQL e acesso via aplicativo) Revisão de SQL Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de pesquisa declarativa para banco de dados relacional (base de dados relacional). Revisão de SQL Principais objetivo: Manipulação de Metadados (DDL) Criação, alteração e exclusão de bancos de dados (Não padronizado) Criação, alteração e exclusão de tabelas Criação, alteração e exclusão de índices Manipulação de Dados (DML) Inserção (Create) Recuperação (Retrieve ou Read) Atualização (Update) Remoção (Delete) Revisão de SQL Principais objetivo: Manipulação de Metadados (DDL) Criação, alteração e exclusão de bancos de dados (Não padronizado) Criação, alteração e exclusão de tabelas Criação, alteração e exclusão de índices Manipulação de Dados (DML) Inserção (Create) Recuperação (Retrieve ou Read) Atualização (Update) Remoção (Delete) Tipos principais (base: JavaDB) Tipos numéricos Inteiros SMALLINT: 2 bytes INTEGER: 4 bytes BIGINT: 8 bytes Casas decimais aproximadas REAL: 4 bytes DOUBLE PRECISION: 8 bytes FLOAT: equivale ao DOUBLE PRECISION Casas decimais exatas DECIMAL NUMERIC: equivale ao DECIMAL Tipos principais (base: JavaDB) Tipos para Texto CHAR VARCHAR Tipo Lógico BOOLEAN Tipo para Data e Hora DATE TIME DATETIME ou TIMESTAMP Exemplo (Cadastro de usuarios) codigo 1 2 4 ... nome João Maria Marcos ... sexo M F M ... idade 34 32 13 ... Tabela de exemplo usuario codigo nome sexo idade integer varchar(60) char(1) smallint Criando a tabela usuario Create table usuario ( codigo nome sexo idade ); integer varchar(60) char(1) smallint Criando a tabela usuario Create table usuario ( Codigo integer not null, Nome varchar(60), Sexo char(1), Idade smallint, Primary key (codigo) ); Chave estrangeira Campo de uma tabela que é chave primária em outra tabela Objetivo: permitir que o valor de um campo de uma tabela seja preenchido apenas com valores existentes em uma coluna de outra tabela Exemplo (Cadastro de dependentes) codigo 1 2 4 ... Codigo 1 2 3 4 nome João Maria Marcos ... CodUsuario 1 1 2 2 sexo M F M ... idade 34 32 13 ... Nome Sexo Idade Parentesco Marta F 30 Esposa José M 12 Filho Pedro M 31 Esposo Josefina F 67 Mãe Tabela dependentes Dependentes codigo codusuario nome sexo idade parentesco integer integer varchar(60) char(1) smallint char(1) Criando a tabela dependente Create table dependente ( Codigo integer not null, Codusuario integer not null, Nome varchar(60), Sexo char(1), Idade smallint, Parentesco char(1) not null, Primary key (codigo), constraint fkcodusuario foreign key (codusuario) references usuario (codigo) ); Inserção de registros INSERT INTO <tabela> VALUES (<valor1>, <valor2>, …, <valorN>) INSERT INTO <tabela> (<campo1>, <campo2>, …, <campoN>) VALUES (<valor1>, <valor2>, …, <valorN>) Exemplo de inserção INSERT INTO usuario VALUES (1, 'João', 'M', 34) INSERT INTO usuario (codigo, nome, idade) VALUES (4, 'Marcos', 13) Atualização de dados UPDATE <tabela> SET <campo1> = <novovalor1>, <campo2> = <novovalor2>, <campoN> = <novovalorN> WHERE <campoA> = <valorX> AND <campoB> = <valorZ> Exemplo UPDATE usuario SET Sexo = 'M' WHERE codigo = 4 Exclusão de dados DELETE FROM <tabela> WHERE <campoA> = <valorX> AND <campoB> = <valorY> Exemplo DELETE FROM usuario WHERE codigo = 5 Recuperação SELECT * FROM <tabela> WHERE <campoA> = <valorX> AND <campoB> = <valorY> SELECT <campo1>, <campo2> FROM <tabela> WHERE <campoA> = <valorX> AND <campoB> = <valorY> Exemplo SELECT * FROM usuario SELECT codigo, nome, sexo, idade FROM usuario SELECT nome FROM usuario WHERE codigo = 1 WHERE sexo = 'M' SELECT * FROM usuario WHERE nome like 'J%' Acessando banco de dados com JAVA Itens fundamentais: Drivers Conexão: Connection Declaração: Statement Resultados: ResultSet Drivers Class.forName("org.apache.derby.jdbc.ClientDriver"); Carregado apenas uma vez, provavelmente, quando a aplicação iniciar; Deve ser carregado antes de se criar a conexão, caso contrário acontecerá o erro: java.lang.ClassNotFoundException Conexão (Connection) Variável de conexão Connection cn; Estabelecendo a conexão cn = DriverManager.getConnection( "jdbc:derby://localhost:1527/MeuBanco;user=APP;password=app" ); Encerrando a conexão cn.close(); Declaração (statement) Criando o statement Statement st = cn.createStatement(); Executando uma operação st.execute( "insert into cliente (codigo, nome, sexo, idade) values (1, 'João', 'M', 34)”); Encerrando o statement st.close(); Declaração Preparada PreparedStatement st; st = cn.prepareStatement( "insert into cliente (codigo, nome, sexo, idade) values (?, ?, ?, ?)"); st.setInt(1, codigo); st.setString(2, nome); st.setString(3, sexo); st.setInt(4, idade); st.executeUpdate(); st.close(); Declaração preparada PreparedStatement st = cn.prepareStatement( "Select * from cliente where codigo = ?"); st.setInt(1, codigo); ResultSet rs = st.executeQuery(); if (rs.next()) { txtNome.setText(rs.getString("nome")); } rs.close(); st.close();