Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD e VBA
PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO

Laravel ::: Artigos e Tutorias ::: CRUD - CREATE, READ, UPDATE, DELETE

Como criar um CRUD completo em Laravel 8 - CRUD em Laravel usando PHP e MySQL (MariaDB) - Parte 1

Quantidade de visualizações: 7331 vezes
Uma das maiores dificuldades de quem está aprendendo a desenvolver aplicações em Laravel é encontrar livros e tutoriais realmente direcionados para os iniciantes. A documentação do framework Laravel é muito consistente e apurada, mas não nos oferece um caminho progressivo para desenvolver do zero uma aplicação que vai de encontro ao anseio daqueles que querem desenvolver códigos Laravel com conexão à banco de dados, principalmente com o MySQL (ou MariaDB).

Nesta série de tutoriais eu mostrarei como criar um CRUD completo em Laravel e MySQL, usando o XAMPP (PHP, MySQL e Apache Web Server). CRUD é uma abreviação para CREATE, READ, UPDADE e DELETE, ou seja, as quatro operações que comumente usamos em cadastros de clientes, produtos, etc.

Então, sem mais atrasos, vamos colocar a mão na massa. Comece verificando se você já tem o Laravel instalado. Caso não tenha, aqui mesmo no site você encontrará instruções para fazer a instalação. Certifique-se também de que o seu XAMPP esteja instalado e funcionando corretamente.

Criando a aplicação Laravel

Para começar, vamos criar a aplicação. Daremos a ela o nome de biblioteca e faremos o cadastro de alguns livros. Abra uma janela de prompt e dispare os comandos abaixo:

C:\Users\Osmar>cd C:\xampp\htdocs
C:\xampp\htdocs>composer create-project --prefer-dist laravel/laravel biblioteca

Aguarde um pouco até que a aplicação seja criada e as dependências sejam instaladas. Vá pegar um cafezinho e, quando voltar, verifique se tudo correu bem e vamos progredir.

Hora de criar a base de dados no MySQL

Depois de criada a aplicação Laravel, vamos até o banco MySQL criar a nossa base de dados. Daremos a ela o nome de biblioteca. Você pode criar a base de dados usando o phpMyAdmin, a linha de comando ou sua ferramenta GUI favorita. O passo seguinte é configurar os parâmetros de conexão essa base de dados. Para isso, abra o arquivo .env na raiz do projeto e localize as linhas abaixo (caso não saiba como abrir o arquivo .env, use a opção File -> Open File do Visual Code da Microsoft):

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

Encontrou as linhas mencionadas? Agora altere-as para as definições abaixo:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=biblioteca
DB_USERNAME=root
DB_PASSWORD=osmar1234

É claro que os parâmetros de conexão Laravel + MySQL podem variar do meu exemplo para o seu.

Vamos criar a migração (migration) - Mais café, por favor

Com a base de dados MySQL já criada, vamos criar agora uma tabela chamada livros. Em uma janela de terminal, dispare os comandos abaixo:

C:\xampp\htdocs>cd C:\xampp\htdocs\biblioteca

C:\xampp\htdocs\biblioteca>php artisan make:migration criar_tabela_livros --create=livros
Created Migration: 2021_01_29_141019_criar_tabela_livros

Se tudo correu bem, abra o diretório C:\xampp\htdocs\biblioteca\database\migrations e verá um arquivo chamado 2021_01_29_141019_criar_tabela_livros.php. Abra-o e teremos o seguinte conteúdo:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CriarTabelaLivros extends Migration
{
  /**
   * Run the migrations.
   *
   * @return void
  */
  public function up()
  {
    Schema::create('livros', function (Blueprint $table) {
      $table->id();
      $table->timestamps();
    });
  }

  /**
   * Reverse the migrations.
   *
   * @return void
  */
  public function down()
  {
    Schema::dropIfExists('livros');
  }
}
?>

Note que temos uma classe chamada CriarTabelaLivros que extende Migration e, dentro dessa classe, foram criados dois métodos: up(), que permite criar a tabela livros e down(), que permite excluí-la.

Vamos alterar o método up() para a seguinte versão:

public function up()
{
  Schema::create('livros', function (Blueprint $table) {
    $table->increments('id');
    $table->string('titulo');
    $table->string('autor');
    $table->integer('paginas');
    $table->timestamps();
  });
}


Veja que nossa tabela livros será composta de quatro campos: id (chave primária auto-incremento), titulo (varchar), autor (varchar) e paginas (int). O Laravel incluirá dois outros campos: created_at e updated_at para podemos registrar data e hora da criação e alteração dos registros individuais.

Vamos fazer a migração agora?

Agora que já temos a base de dados MySQL criada, configuramos os parâmetros de conexão no arquivo .env e criamos o arquivo de migração, o passo seguinte é rodar a migração. Para isso abra uma janela de terminal e digite o comando a seguir:

C:\xampp\htdocs\biblioteca>php artisan migrate
Migrating: 2021_01_29_141019_criar_tabela_livros
Migrated: 2021_01_29_141019_criar_tabela_livros (63.66ms)

Se olharmos na base de dados agora, veremos que a tabela livros foi devidamente criada. Confira os campos atentamente e faça as alterações que julgar necessárias.

Na parte 2 deste tutorial de CRUD usando Laravel + MySQL, veremos como criar a rota de direcionamento das ações CRUD, o controlador (controller), o model (model) e as views (visões). Até lá e bons estudos.

Leia a parte 2 aqui: Como criar um CRUD completo em Laravel 8 - CRUD em Laravel usando PHP e MySQL (MariaDB) - Parte 2


Java ::: Dicas & Truques ::: Threads

Threads em Java - O que são threads e como usá-las em seus programas Java

Quantidade de visualizações: 13811 vezes
Uma thread é um fluxo de execução de uma determinada tarefa em um programa. Na programação tradicional, temos apenas um fluxo de execução que começa a executar no início do programa e vai até o final. Com o uso de threads podemos ter várias tarefas sendo executadas ao mesmo tempo, cada uma independente da outra.

Em programas que contêm interfaces gráficas, o uso de múltiplos fluxos de execução (ou threads) é muito comum. Enquanto digitamos em uma caixa de texto, uma animação pode estar sendo executada ou um arquivo sendo baixado.

O Java permite que tenhamos várias threads sendo executadas ao mesmo tempo. Cada tarefa (ou thread) é uma instância da interface Runnable. Esta interface descreve apenas um método:

public void run();
Há duas formas de criarmos uma thread em Java. A primeira consiste em extender a classe Thread. Esta classe implementa a interface Runnable e fornece o método start(), que é usado para avisar ao gerenciador de threads que a thread recém criada está pronta para ser executada. Veja um exemplo:

// criamos uma classe que servirá como thread
class MinhaThread extends Thread{
  private String nome;  

  public MinhaThread(String nome){
    this.nome = nome;
  }   

  public void run(){
    for(int i = 1; i <= 20; i++){
      System.out.println(nome + ": " + i);
    }
  }
}

public class Estudos{
  public static void main(String[] args){
    // vamos criar duas threads
    MinhaThread t1 = new MinhaThread("Thread 1");
    t1.start(); // chamamos o método start() e não run()

    MinhaThread t2 = new MinhaThread("Thread 2");
    t2.start(); // chamamos o método start() e não run()    

    System.exit(0);
  }
}

Salve este código como Estudos.java, compile e execute. Veja que cada thread escreverá de 1 a 20 na tela. Observe como as duas threads se alternam em suas tarefas, ou seja, de tempos em tempos uma cede lugar para que a outra seja executada. Note também que, embora nossa classe tenha um método run() nós não o chamamos. O que fazemos é chamar o método start(), que torna a thread elegível para ser executada a qualquer momento.

Uma outra forma de criarmos uma thread é fazer com que nossa classe implemente a interface Runnable. Veja:

// criamos uma classe que servirá como thread
class MinhaThread implements Runnable{
  private String nome;  

  public MinhaThread(String nome){
    this.nome = nome;
  }   

  public void run(){
    for(int i = 1; i <= 20; i++){
      System.out.println(nome + ": " + i);
    }
  }
}

public class Estudos{
  public static void main(String[] args){
    // vamos criar duas threads
    MinhaThread mt1 = new MinhaThread("Thread 1");
    Thread t1 = new Thread(mt1);
    t1.start();    

    MinhaThread mt2 = new MinhaThread("Thread 2");
    Thread t2 = new Thread(mt2);
    t2.start();

    System.exit(0);
  }
}

O funcionamento do código é o mesmo. A diferença é que agora, a classe usada como thread implementa a interface Runnable. A forma de criação da thread também foi alterada. Agora nós criamos instâncias de Thread fornecendo nossa classe thread como argumento e chamamos o método start da classe Thread e não de nossa própria classe, como fizemos anteriormente.


Java ::: Dicas & Truques ::: Gráficos

Como desenhar em um JComponent (JLabel, JButton, JPanel, etc) usando o método getGraphics() para obter o contexto de desenho

Quantidade de visualizações: 14198 vezes
A classe JComponent possui um método chamado getGraphics() que retorna um objeto da classe Graphics que pode ser usado para desenhar na superfície do componente. Desta forma, qualquer componente que herda de JComponent pode ser usado para esta finalidade.

Antes de demonstrarmos como isso funciona, tenha em mente que o contexto de desenho de um componente só está disponível após ele ser pintado pela primeira vez. Se tentarmos obter o Graphics antes que o componente tenha sido pintado, corremos o risco de lançar uma exceção NullPointerException.

O trecho de código abaixo mostra como desenhar uma linha em um JLabel ao clicar em um botão. Fique atento a este código. Boa parte das dicas vistas nesta seção usam esta abordagem:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Estudos extends JFrame{
  JLabel label;  

  public Estudos() {
    super("Desenhando em um JLabel");
    
    Container c = getContentPane();
    c.setLayout(new BorderLayout());

    // Cria um JLabel
    label = new JLabel();
    c.add(label, BorderLayout.CENTER);

    // Cria um botão
    JButton btn = new 
      JButton("Desenhar uma linha");
    btn.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          
          // Desenha uma linha no JLabel
          Graphics graphics = label.getGraphics();
          graphics.drawLine(0, 0, 150, 100);
        
        }
      }
    );
    
    // Adiciona o botão à janela
    c.add(btn, BorderLayout.SOUTH);

    setSize(350, 250);
    setVisible(true);
  }
  
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Há algo de interessante neste código. Se você maximizar, minimizar ou redimensionar a janela verá que o desenho é apagado. Isso acontece porque todas as vezes que a janela sofre alguma alteração, ela é pintada novamente, juntamente com seus componentes filhos. Se você deseja que o desenho seja feito automaticamente novamente, é melhor fazer uma sub-classe do componente desejado e sobrescrever seu método paintComponent(). Nesta mesma seção você encontrará exemplos de como fazer isso.


Java ::: Fundamentos da Linguagem ::: Tipos de Dados

Java para iniciantes - Como usar o tipo de dados byte da linguagem Java

Quantidade de visualizações: 12834 vezes
O tipo de dados byte pode ser usado quando queremos armazenar valores inteiros na faixa ?128 à 127. Veja um exemplo:

public class Estudos{
  static byte valor = 102; 
  
  public static void main(String args[]){
    System.out.println("O valor da variável é: "
      + valor);
    System.exit(0);
  }
}

Porém, é preciso estar atento a um detalhe muito importante (testado na versão 6 do SDK). Veja o trecho de código seguinte:

public class Estudos{
  public static void main(String args[]){
    byte a = 5;
    byte b = 6;
    byte soma = a + b;    

    System.out.println("O resultado é: " + soma);
    System.exit(0);
  }
}

À primeira vista este código está correto, visto que a soma das variáveis a e b não ultrapassam a faixa do tipo byte. Porém, ao tentarmos compilar, temos a seguinte mensagem de erro:

Estudos.java:5: possible loss of precision
found   : int
required: byte
  byte soma = a + b;
              ^
1 error


Isso acontece porque o tipo de dados resultante da aplicação do operador de adição (e demais operadores binários) a dois números, é no mínimo int. Podemos, é claro, fazer uma coerção de dados (cast). Veja:

byte a = 5;
byte b = 6;
byte soma = (byte)(a + b);

O tipo de dados byte pode ser convertido (sem a necessidade de cast) para os seguintes tipos:

byte -> short -> int -> long -> float -> double


Um tipo byte não pode ser convertido implicitamente para o tipo char. Isso acontece porque o tipo char não possui sinal.


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby


E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser. Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book Apenas R$ 19,90


© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 86 usuários muito felizes estudando em nosso site.