Loading

Module 1: Introdução ao MYSQL Database e Java

Nota de Estudos
Study Reminders
Support
Text Version

Introdução de Usuários Registradores de Navegantes

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Até o momento, criamos uma tela com um campo de entrada e 3 botões para registro, despesase relatório. Registro mostra os usuários registrados no banco de dados. No entanto esses usuários foramregistrados usando o MySQL a partir do prompt de comando.
O próximo passo é tentar registrar um usuário a partir do navegador em vez disso o que é uma razoávelexpectativa para um usuário do aplicativo web. A atualização do banco de dados e a negociação com a entrada do usuáriotraz para cima várias novas questões, como;1. Toda vez que um novo usuário é solicitado a ser registrado, verifique se o nome de usuário jáexiste e eles devem escolher um novo nome de usuário.2. Inserir despesas: Se, por engano, uma despesa extra ou incorreta for adicionada à tabela dedespesa, uma funcionalidade extra de ser capaz de editar ou excluir uma linha digitada anteriormentedeve ser projetada.
Para conseguir isso, vamos usar uma combinação de instalações de banco de dados e fazer certas alteraçõesno app existente.
Considerar o seguinte programa de teste simples: insertdb.java, onde tentamos inserir registros emo banco de dados.
A maioria das instruções são familiares.● Criamos uma conexão com o banco de dados usando o driver de banco de dados e a instrução tem a consultaa ser executada no banco de dados nptel especificado na url usando padrão jdbc.● O bloco try tem rv=stmt.executeUpdate (“ insert into users2valores (0 ,2, ’ f1 ’);● Embora esta seja uma simples consulta de atualização, a diferença importante de cenários anterioressão erros podem surgir, uma vez que estamos atualizando o banco de dados (diferentemente da consulta em que nóssó lemos do banco de dados). Precisamos capturar exceções usando o objeto padrãoSQLException que possui muita informação.● Objeto SQLException tem uma mensagem, estado SQL, código de erro e um campo de causa. SQLestado é um padrão de linguagem SQL.
● Na página web do MySQL, podemos encontrar mapeamento de números de erros do MySQL para o código do estado SQL.● Nós iremos encontrar 42S02 no webapp criado até agora, queER_BAD_TABLE_ERROR.● Nós imprimimos a mensagem e fechamos o banco de dados.Este é apenas um programa de teste. Compile o arquivo insertdb.java usando javac insertdb.javae execute usando o java insertdb. Obtemos esta mensagem de erro:
A mensagem de erro: Tabela ‘ nptel.users2 ’ doesn ’ t exist.Isto é porque nós não o criamos ainda. Este motivo para executá-lo antes de criar foi parademonstrar a descrição do erro.
O texto destacado tem um campo de mensagem de objeto SQLException. O estado é um padrãoa partir de SQL, valor é 42S02 como previsto. MariaDB ’ s MySQL também tem códigos de status que explicamo tipo de erro, neste caso o seu valor é 1146.
Para corrigir o erro, crie uma tabela users2.
Agora execute insertdb usando o java insertdb, ele supera rv=1. Este é o número de linhas em
users2. Isso significa que consulta de inserção no insertdb.java foi bem-sucedida.
O prompt de comando esquerdo executa insertdb após a tabela users2 é criada, a tabela atualizada éexibida no prompt de comando certo como saída para a consulta select * from users2.
Para garantir que um não possa inserir o mesmo username está usando restrição exclusiva, assim como as chaves primáriassão necessárias para serem exclusivas, também podemos garantir que o nome de usuário seja único.
Agora se tentarmos inserir a mesma linha, há uma exceção que é a de que a chave duplicadaf1 está inserida para uname e desta vez o código de status muda para 23.000 e o código mariadbé 1062. 23000 é o código de erro padrão para ER_DUP_ENTRY.
A maneira usual de corrigir erros é consultar o código de status (aqui, ER_DUP_ENTRY o qualsignifica que uma entrada duplicada foi feita).
TIP:Quando utilizamos sites, quase todos eles exigem que os usuários se registrem e se identifiquedesde nome, cidade, etc., não é necessariamente único ou também pode ser o caso de alguém poderfacilmente personificar você sabendo seus detalhes. Então, em vez disso, criamos uma nova identidade ou você usauma identidade que já é conhecida por ser única como o endereço de e-mail Yahoo onde algunsterceiros como Yahoo ou Google cuidaram de que os ids de e-mail são únicos para finalmente chegar auma noção estável de identidade de usuário para o seu app.
No código anterior, criamos uma tabela sem uma restrição exclusiva e, em seguida, adicionamos poralterando-a. A alternativa é utilizar esta declaração exclusiva bem no esquema da tabela comomostrado abaixo.
Então, por exemplo, se você quiser ver como essa exclusividade é obtida use índices de demonstração a partir deusers2;
Registrar página do website precisa ter a funcionalidade de desbancar erros. Nós em vez dissocriamos uma nova tela com uma url diferente para exibir consultas que levam a um erro.
O lugar certo para retornar um erro como este é uma questão de design de UI.
Na própria página de registro, temos o campo de entrada que corresponde ao campo de entrada mostradoaqui, mas na página de erro de registro adicionamos outra linha (destacada na figura acima)além do campo de entrada.
Um designer pode preferir que a mensagem de erro seja centrada ou alinhada ao lado esquerdo deo campo de entrada. Todos estes efeitos podem ser alcançados, mas é feio conseguir apenas com tabelas.O CSS é melhor mas precisa de muito mais conhecimento de CSS do que o que aprendemos.
A página de erro com um estilo extra chamado esboço: 1px sólido azul. Isso é feito para mostrar
como a primeira linha tem uma tabela com 2 linhas, portanto, há uma tabela dentro de uma tabela.
Como sabemos a parte primária da estrutura é uma linha de botões, uma linha com o campo de entrada,mas então este campo de entrada por sua vez consiste em uma tabela que ele mesmo contém o campo de entradae a segunda linha tem o texto de mensagem de erro. Fazer isso e dimensioná-los pode ser tedioso.
O CSS torna muito mais fácil criar aplicativos que funcionam para mobiles, tablets, bem comowebsites normais.
A interface com o usuário é afetada com base na entrada para o campo de entrada. A interface com o usuário torna-semais dinâmica já que o app tem que detectar a presença ou ausência de erros e saída diferentesarquivos html.Queremos ver a seguinte saída quando um usuário já criado abc2 é registrado novamente:
Nós vamos adicionar duas coisas ao arquivo FairShareDb.java:
● A parte de atualização é feita em uma função chamada registerUser (req, out) queleva o pedido e a saída. Esta saída é o PrintWriter que obtemos do objeto de resposta.● Obter todos os usuários registrados na parte de consulta e isso está incluído no template como nósvimos anteriormente.
O timestamp unix é avaliado no lado do servidor, esta é uma função SQL:unix_timestamp (). howmany field armazena o número de linhas afetadas a partir da consulta de registro executado anteriormente.
Quando há uma exceção, o estado SQL é verificado para entrada duplicada usandosqlState.iguais (SQLSTATEDUP). Vamos configurar o atributo na solicitação quediz “ sim ”, há um utilizador duplicado e também vamos enviar o username que étentado a ser duplicado, de modo que a mensagem de erro pode conter qual utilizador exatamente foiduplicado.
Se o código de estado SQL for outra coisa, nós simplesmente vamos fazer o dump da exceção SQL eentão fechar a instrução. Vamos tomar uma ação com tipos de erro de entrada duplicada.
Executar a consulta e o resultado é uma lista de mapas, configurar o atributo de dados do usuário e ir para a funçãoregister.jsp. Uma novidade aqui dentro é que esse template faz 2 coisas diferentes com base emse havia um usuário duplicado ou não. Como vimos, o objetivo é adicionar uma linha contendo a mensagem de errosomente se houver um usuário duplicado e se houver tal usuário, então você devemencionar o que é isso.
Você pode ter notado que o erro foi impresso em texto colorido vermelho usando a classe CSS:tdError.
classe tdError: Cor deve ser vermelho, estilo de fonte é itálico, tamanho da fonte é maior ou seja, apenas maior quefonte padrão, alinhar-se ao centro. As duas classes CSS acima foram usadas para obter o layout da tabelada última vez.
Validação começa a se tornar muito importante quando as atuações são feitas. Para demonstrar, clique emregistrar usuário sem entrada inserida no campo de entrada. Desde o username! =null está presente no código, se não houver nenhum nome de utilizador, há uma nova linha na tabela com um nome em branco embora ocomportamento esperado como um utilizador final do website pode ser não adicionar nenhuma linha à tabela.
Há muito mais a validação do usuário do que o exemplo simples. Para demonstrar isso, nós primeirofazemos uma mudança para rejeitar a string vazia se o username estiver vazio.
Precisamos garantir que nada falhe quando a tabela estiver vazia, mas nosso website exibe um erro.
O teste de um banco de dados deve ser automatizado mas ele é um recurso característico do desenvolvimento moderno da webonde a maioria deles é testado em alguma versão.
No nosso caso, poderíamos utilizar o tomcat incorporado mas há muitas maneiras de automatizar. Uma vez quemudando, entrando e checando os detalhes começa a se tornar o recurso de sua aplicação,a vida faz ficar consideravelmente mais difícil. Mesmo adicionando uma cotação única (‘) para a entrada lança uma exceçãoque o nosso app não pode manipular, ele apenas dumps o rastreio de pilha. Então apenas uma entrada ruim é
difícil de lidar.
Nós utilizamos o conceito de instruções preparadas para alcançar melhor teste. Sob certas circunstânciaselas podem ser mais eficientes também, especialmente quando usadas em loops. Ele especificao banco de dados que parte da instrução é especificado por desenvolvedor e qual parte está chegandocomo entrada dos usuários, para que o banco de dados o trate não como algo que cuja sintaxeo banco de dados tem que entender, ele irá limpar a entrada do usuário de isolamento e depois armazená-lo separadamentesem deixar afetar o restante da instrução.
No nosso exemplo, nada está irremediavelmente quebrado, apenas o pedido fica afetado. Assim, podemosrecarregar a página para apagar a execução anterior.
Em vez de criar apenas uma instrução, vamos criar uma instrução preparada onde nomesmo local a consulta também é fornecida. A instrução preparada entrará em contato com o banco de dados,compilará a instrução preparada, esta é outra razão por causa da pré-compilação queinstruções preparadas podem ser mais eficientes e na instrução preparada vamos deixarum furo, um parâmetro onde o valor do usuário será plugado. A maneira usual de fazer isso é parater um? dizer que é aqui que vamos nos plugar em um valor. O restante permanece o mesmo queantes.
Então você obtenha o userName como antes, complete sua validação e, em seguida, diga upd.setString (1, username); e porque a consulta já é conhecida tudo o que você tem a fazeré executar a atualização como mostrado acima.A ideia é você não especificar uma entrada ruim é como, você só especifica o que uma boa entrada é,Então, mesmo que o banco de dados, o SQL padrão pode não aprovar quando anotado em uma sintaxe string,
Você pode usar a mesma ideia por exemplo para despesas. Neste ponto teremos, na verdade,quase um app completo de banco de dados no qual a única coisa que é diferente é que diferentes usuáriosnão podem acessar o sistema ao mesmo tempo ainda apenas.
Então, neste ponto nós você tem um app razoavelmente completo.
No entanto, não temos operações de exclusão como a remoção de um usuário mas não é diferente deo que fizemos até agora. Assim como fizemos o registro, crie outro botão chamado sem registroque faz com que o sistema exclua a linha do banco de dados com o nome de usuário fornecido.
Uma vez adicionamos login e cookies, nosso app estará basicamente completo e você terá vistotodas as peças incluindo vários cenários de depuração que aparecem quando um app web tem que serdesenvolvido.