Python – consulta a banco de dados, parte II

Este exemplo é praticamente uma repetição do exercício anterior, mas desta vez usamos o MySQL no Linux (Ubuntu 23.10 Mantic Minotaur).

  • Design-time
import mysql.connector

dados = {
    "host":"localhost",
    "user":"meu_usuario",
    "password":"minha_senha",
    "database":"db_Concessionaria"
}
consulta = "SELECT * FROM tb_Veiculo"

try:
    conexao = mysql.connector.connect(**dados)
    cursor = conexao.cursor()
    cursor.execute(consulta)
    for linha in cursor:
        print(linha)
finally:
    cursor.close()
    conexao.close()
  • Runtime
  • Sintaxe

No exemplo anterior, foi usado o pyodbc para se conexão ao SQL Server no Windows, enquanto neste caso foi usado o mysql.connector para conexão ao MySQl no Linux. Ambas as bibliotecas têm suas próprias formas de passar os detalhes da conexão:

  1. pyodbc utiliza uma string de conexão estilo ODBC que é específica para o SQL Server.
  2. mysql.connector aceita os detalhes da conexão como um dicionário (ou hash, mapa, array associativo), que é uma convenção comum em muitas bibliotecas Python. Observe atentamente as linhas destacadas (3-8 e 12), comparando com as linhas correspondentes do exemplo anterior.
  • Reflexões

Quino tinha razão quando falou através da Mafalda: “Viver sem ler é perigoso porque obriga-nos a acreditar no que nos dizem”. No entanto, é importante prestar muita atenção no que se lê e não acreditar automaticamente em tudo que sê lê. Conhecer o mensageiro é tão importante quanto entender a mensagem. Acredita em qualquer coisa quem acredita que a cobra falou com Eva, por exemplo. Lembre-se: aqueles que podem te fazer acreditar em absurdos, podem te fazer cometer atrocidades!

De qualquer forma, William Faulkner tinha razão: “O que a literatura faz é o mesmo que acender um fósforo no campo no meio da noite. Um fósforo não ilumina quase nada, mas nos permite ver quanta escuridão existe ao redor.”

Python – Conexão e consulta a banco de dados

Neste e nos próximos posts vamos compartilhar um código relativamente simples para se fazer uma consulta a um banco de dados em algumas linguagens de programação, desta vez Python.

  • Design-time
import pyodbc

dados_conexao = (
    "Driver={SQL Server};"
    "Server=DESKTOP-CRJM4TM\\SQLEXPRESS;"
    "Database=db_Concessionaria;"
)
comando = "SELECT * FROM tb_Veiculo"

try:
	conexao = pyodbc.connect(dados_conexao)
	cursor = conexao.cursor()

	cursor.execute(comando)
	registros = cursor.fetchall()
	for r in registros:
    		print(r)

finally:
	cursor.close()
	conexao.close()
  • Runtime
  • Sintaxe

Esse código Python lida com a conexão a um banco de dados SQL Server utilizando o módulo pyodbc. Aqui está uma explicação passo a passo do que o código faz:

  1. Importa o módulo pyodbc, que é uma biblioteca Python para acessar bancos de dados usando ODBC (Open Database Connectivity).
  2. Define uma string dados_conexao que contém as informações necessárias para se conectar ao banco de dados. Isso inclui o driver ODBC a ser usado, o nome do servidor e o nome do banco de dados.
  3. Tenta estabelecer uma conexão com o banco de dados usando pyodbc.connect(dados_conexao). Se a conexão for bem-sucedida, um objeto de conexão é retornado.
  4. Cria um objeto de cursor usando conexao.cursor(). Um cursor é necessário para executar comandos SQL no banco de dados.
  5. Define uma string comando que contém a consulta SQL a ser executada. Neste caso, parece ser uma consulta para selecionar todos os registros da tabela tb_Veiculo.
  6. Executa o comando SQL no banco de dados usando cursor.execute(comando).
  7. Recupera todos os registros retornados pela consulta usando cursor.fetchall(). Isso retorna uma lista de tuplas, onde cada tupla representa um registro da tabela.
  8. Itera sobre os registros recuperados e imprime cada um deles.
  9. No bloco finally, fecha o cursor e a conexão com o banco de dados para liberar os recursos.

Em resumo, este código estabelece uma conexão com um banco de dados SQL Server, executa uma consulta para recuperar todos os registros de uma tabela e, em seguida, imprime os registros na saída padrão.

No Windows, a conexão ao SQL Server é autenticada automaticamente. Por isso, a opção “Trusted_Connection=yes;” é implícita e opcional no array dados_conexão.

Poderíamos eliminar a linha 15 e modificar a linha 16 trocando registros por cursor, da seguinte forma:

for r in cursor:
print(r)

Neste caso, com uma linha a menos, a iteração sobre os resultados é feita diretamente no cursor, evitando o uso de cursor.fetchall().

  • Reflexões

Na tentativa de entender a relação de neopentecostais com milicianos e a extrema-direita, lembrei-me de alguém me dizer certa vez: “se uma pessoa acredita que uma cobra falou, então essa pessoa acreditaria em qualquer coisa”. Claro, esta é versão divertida da seguinte verdade, atribuída a Voltaire:

“Anyone who can make you believe absurdities can make you commit atrocities.”

PHP – Conexão e consulta a banco de dados

Que tal usar PHP no Windows para consultar um banco de dados do Microsoft SQL Server?

  • Design-time
<?php
$serverName = "DESKTOP-CRJM4TM\\SQLEXPRESS";

$connectionOptions = array(
    "Database" => "db_Concessionaria",
    "Uid" => "",
    "PWD" => ""
);

$conn = sqlsrv_connect($serverName, $connectionOptions);

if ($conn) {
    echo "Connection established.\n";
} else {
    echo "Connection could not be established.\n";
    die(print_r(sqlsrv_errors(), true));
}

$sql = "SELECT * FROM tb_Veiculo";
$stmt = sqlsrv_query($conn, $sql);

if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}

// Obtém os nomes das colunas
$metaData = sqlsrv_field_metadata($stmt);
$fields = array();
foreach ($metaData as $field) {
    $fields[] = $field["Name"];
}

// Exibe os cabeçalhos
foreach ($fields as $fieldName) {
    echo str_pad($fieldName, 15);
}
echo "\n";

// Exibe os dados
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    foreach ($fields as $fieldName) {
        echo str_pad($row[$fieldName], 15);
    }
    echo "\n";
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
  • Runtime
  • Design-time

Substituindo as linhas 33-45 da primeira listagem pelas seguintes:

echo "<table border='1'>";
echo "<tr>";
foreach ($fields as $fieldName) {
    echo "<th>" . $fieldName . "</th>";
}
echo "</tr>";

while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    echo "<tr>";
    foreach ($fields as $fieldName) {
        echo "<td>" . $row[$fieldName] . "</td>";
    }
    echo "</tr>";
}

echo "</table>";
  • Runtime

  • Sintaxe

Para abrir uma conexão ao banco de dados do Microsoft SQL Server, PHP usa a função sqlsrv_connect, cujos argumentos são a string $serverName (linha 2) e a referência a array associativo $connectionOptions (linha 4). Com a autenticação automática do Windows, não são necessários o usuário (Uid) e a senha (PWD).

A string $conn (valor retornado pela função sqlsrv_connect), definida na linha 10, e a string $sql (que contém as instruções SQL desejadas), definida na linha 19, são argumentos da função sqlsrv_query, cujo valor retornado é atribuído à string $stmt na linha 20.

A exemplo das linhas 22 a 24, as linhas 12 a 17 poderiam ser substituídas por

if ($conn === false) {die(print_r(sqlsrv_errors(), true));}

A consulta $stmt e a conexão $conn são finalizadas respectivamente nas linhas 47 e 48.

A tabela tb_Veiculo do nosso banco de dados db_Concessionaria é exibida através do código contido entre as linhas 26 e 45. Para melhor compreensão, sugiro as seguintes leituras:

Microsoft SQL Server Driver for PHP

sqlsrv_field_metadata

Veja como instalar o PHP no Windows e rodar aplicações no browser, como na segunda listagem exemplificada acima, sem nenhum servidor web tipo “AMP” (MAMP, XAMPP, WampServer, AMPPS…): https://blog.schoolofnet.com/como-instalar-o-php-no-windows-do-jeito-certo-e-usar-o-servidor-embutido/

  • Reflexões

O parlamento é o espelho distorcido da sociedade brasileira. É distorcido porque não é a imagem real, mas é um imagem virtual. Exemplo: o Congresso tem maioria branca, masculina, velha e rica, diferentemente da sociedade. Por que é assim? Porque negro vota em branco, mulher vota em homem, jovem vota em velho, pobre vota em rico, assalariado vota em patrão. O que tem acontecido no Brasil é que barata está elegendo chinelo. Se não fosse assim, a democracia não estaria sendo tão atacada nos últimos 11 anos, e o obscurantismo não seria a maior preocupação das pessoas que leem, conhecem a História, entendem o que é ideologia e têm consciência de classe.

Perl – ordenar e classificar

Neste exemplo vamos classificar celulares por preço em ordem crescente. Se dois tiverem o mesmo preço, vamos classificá-los por desconto em ordem decrescente.

  • Design-time

Array de arrays

my $a1r = ['Galaxy', 700, 0.8];
my $a2r = ['Xiaomi', 300, 0.1];
my $a3r = ['Iphone', 700, 0.5];

my @array = ($a1r, $a2r, $a3r);

@array = sort{$a->[1] <=> $b->[1] || $b->[2] <=> $a->[2]}@array;

foreach my $i (@array) {
    printf "%-10s%-8s%-4s\n", $i->[0], $i->[1], $i->[2];
}

Array de hashes

my $h1r = { nome => 'Galaxy', 
			preco => 700, 
			desconto => 0.8 };

my $h2r = { nome => 'Xiaomi', 
			preco => 300, 
			desconto => 0.1 };

my $h3r = { nome =>'Iphone', 
			preco => 700, 
			desconto => 0.5 };

my @array = ($h1r, $h2r, $h3r);

@array = sort{$a->{preco} <=> $b->{preco} || $b->{desconto} <=> $a->{desconto}}@array;

foreach my $i (@array) {
    printf "%-10s%-8s%-4s\n", $i->{nome}, $i->{preco}, $i->{desconto};
}
  • Runtime

  • Sintaxe

Marcas, preços e descontos de telefones podem ser ordenados em um array de referências a arrays ou a hashes. Lembre-se: os elementos de um array só podem ter valores escalares. Por isso, se queremos contruir um array de arrays ou de hashes, usamos as referências que apontam a esses arrays ou hashes em vez ou lugar dos próprios arrays ou hashes. Ver a linha 5 no primeiro exemplo, e a linha 13 no segundo.

Usando a função sort com uma expressão contendo os operadores de comparação <=> e lógico || (Or, ou), o array é ordenado conforme o preço (elemento 1 dos arrays referenciados ou a chave preco dos hashes referenciados) e o desconto (elemento 2 ou chave desconto, respectivamente). Ver a linha 7 no primeiro exemplo, e a linha 15 no segundo.

Dúvidas?

  • Reflexões

O ex-presidente de extrema direita falava com frequência ao seu gado que “conhecerão a verdade, e a verdade os libertará”, com toda a razão. Veja a seguir a íntegra da reunião secreta da cúpula golpista em 5 de julho de 2022:

E também uma interpretação bem precisa do fascismo miliciano:

https://www.uol.com.br/esporte/colunas/milly-lacombe/2024/02/11/teria-sido-um-golpe-miliciano-com-apoio-liberal.htm

Perl – Listas e arrays

Que tal fazermos uma pausa no que se refere a conexão e consulta a banco de dados e voltarmos um pouco ao Perl? Afinal, Perl é código aberto, útil, divertido, pode mostrar o mundo da programação a você, e te permite reutilizar código comprovado e utilizado por um mundo de pessoas!

  • Design-time & RuntimeListas
print "Exemplo de lista:\t", "2, 'sublistas:', (0..2), (a..c)";

print "\n\nPara imprimir sem delimitadores (aspas), faça \n";
print "print 2, 'sublistas:', (0..2), (a..c); ou\n";
print "print 2, \"sublistas:\", (0..2), (a..c); e veja o resultado:\n";
print 2, 'sublistas:', (0..2), (a..c);

print "\n\nPara imprimir sem delimitadores (aspas) e\n";
print "explicitando as faixas, faça \n";
print "print 2, 'sublistas:', (0, 1, 2), (a, b, c); ou\n";
print "print 2, \"sublistas:\", (0, 1, 2), (a, b, c); e veja o resultado:\n";
print 2, 'sublistas:', (0, 1, 2), (a, b, c);

print "\n\nPara imprimir uma lista com qw, faça \n";
print "print qw&2 sublistas: (0..2) (a..c)&; e veja o resultado:\n";
print qw&2 sublistas: (0..2) (a..c)&;

print "\n\nPara imprimir com qw e explicitando as faixas, faça \n";
print "print qw&2 sublistas: (0, 1, 2) (a, b, c)&; e veja o resultado:\n";
print qw&2 sublistas: (0, 1, 2) (a, b, c)&;

print "\n\nNeste caso, a lista não precisa incluir vírgulas entre os elementos\n";
print "nem aspas envolvendo strings, mas \n";
print "não deve conter faixas ou sublistas.  Por isso, faça\n";
print "print qw&2 sublistas: 0 1 2 a b c&; e veja o resultado:\n";
print qw&2 sublistas: 0 1 2 a b c&;

print "\n\nPara imprimir ordenadamente apenas um ou mais elementos da lista, é\n";
print "necessário incluir os parênteses tanto para a lista como para o comando,\n";
print "além do(s) índice(s) entre colchetes. Exemplos:\n";
print "print ((2, 'sublistas:', (0, 1, 2), (a, b, c))[3]); retorna ";
print ((2, 'sublistas:', (0, 1, 2), (a, b, c))[3]);
print "\nprint ((2, 'sublistas:', (0..2), (a..c))[0,7]); retorna ";
print ((2, 'sublistas:', (0..2), (a..c))[0,7]);
print "\n";
  • Design-time & RuntimeArrays
print "Para definir e imprimir uma lista, faça \n";
print "my \@lista = (2, 'sublistas:', (0..2), (a..c));\n";
print "print \"Exemplo de lista:\\t\", \"\@lista\";";
print "\ne veja o resultado:\n";
my @lista = (2, 'sublistas:', (0..2), (a..c));
print "Exemplo de lista:\t", "@lista";

print "\n\nPara imprimir sem delimitadores (aspas), faça \n";
print "print \@lista; e veja o resultado:\n";
print @lista;

print "\n\nPara imprimir sem delimitadores (aspas) e\n";
print "explicitando as faixas, faça \n";
print "\@lista = (2, 'sublistas:', (0, 1, 2), (a, b, c));\n";
print "print \@lista;\ne veja o resultado:\n";
@lista = (2, 'sublistas:', (0, 1, 2), (a, b, c));
print @lista;

print "\n\nPara definir e imprimir uma lista com qw, faça \n";
print "my \@lista1 = qw&2 sublistas: (0..2) (a..c)&;\n";
print "print \"\@lista1\";\ne veja o resultado:\n";
my @lista1 = qw&2 sublistas: (0..2) (a..c)&;
print "@lista1";

print "\n\nPara imprimir com qw e explicitando as faixas, faça \n";
print "\@lista1 = qw&2 sublistas: (0, 1, 2) (a, b, c)&;\n";
print "print \@lista1;\ne veja o resultado:\n";
@lista1 = qw&2 sublistas: (0, 1, 2) (a, b, c)&;
print @lista1;

print "\n\nNeste caso, a lista não precisa incluir vírgulas entre os elementos\n";
print "nem aspas envolvendo strings, mas \n";
print "não deve conter faixas ou sublistas.  Por isso, faça\n";
print "\@lista1 = qw&2 sublistas: 0 1 2 a b c&;\n";
print "print \@lista1;\ne veja o resultado:\n";
@lista1 = qw&2 sublistas: 0 1 2 a b c&;
print @lista1;

print "\n\nPara imprimir ordenadamente apenas um ou mais elementos da lista, é\n";
print "necessário incluir o(s) índice(s) entre colchetes. Exemplos:\n";
print "print \@lista[3]; retorna ";
print @lista[3];
print "\nprint \@lista1[0,7]; retorna ";
print @lista1[0,7];
print "\n";
  • Sintaxe

As listagens acima já estão bem autoexplicativas, mas cabe algum comentário.

Observa a saída ou como é a impressão resultante das linhas 1 (da primeira listagem) e 6 (da segunda listagem). No primeiro caso, com a lista entre aspas duplas, somente as aspas são retiradas e tudo é preservado como se fosse ( e é) uma string. No segundo caso, com o nome do array entre aspas, tudo (vírgulas, parênteses, aspas envolvendo strings) é retirado, e apenas os elementos do array são mostrados, separados por um espaço em branco – tanto na linha 6 como na linha 23.

  • Reflexão

É comum se ver grande parcela da classe média fugindo do “governo comunista do PT” e da “ditadura judicial” brasileira para os Estados Unidos e, às vezes para Portugal, sem saber (porque não gosta de ler e se informa apenas pelas redes sociais) que Portugal vive sob parlamento socialista e plena democracia, enquanto a democracia nos Estados Unidos é praticamente tão falha como no Brasil. Exemplos: em 6 de janeiro de 2021 uma horda de apoiadores de Trump invadiu o Capitólio; e em 8 de janeiro de 2023 uma horda de apoiadores de Bolsonaro invadiu e vandalizou a Praça dos Três Poderes. Essa gente, que ignora e ataca a democracia, mal tem ideia de que nas Américas, plena democracia hoje só existe, e pela ordem, na Costa Rica, no Canadá, no Uruguai e no Chile. Aliás, vejam que reportagem interessante saiu hoje no conservador Estadão: https://www.estadao.com.br/economia/sua-carreira/aposentadoria-2024-melhores-lugares-viver/.

C# – Conexão e consulta a banco de dados

Que tal consultar o nosso banco de dados usando C# desta vez? Veja a seguir dois exemplos, um usando a IDE Visual Studio 2022 e outro usando apenas o velho e bom Bloco do Notas e o Prompt de Comando do Windows.

  • Design-time e Runtime

Microsoft Visual Studio 2022

using System;
using System.Data.SqlClient;

namespace AdoNetConsoleApp4{
    internal class Program{
        static void Main(string[] args){
            new Program().SelectFromTable();
        }
        public void SelectFromTable(){
            SqlConnection conn = null;
            try{
                conn = new SqlConnection("data source=.\\SQLEXPRESS; database=db_Concessionaria; integrated security=SSPI");
                SqlCommand cmd = new SqlCommand("SELECT * FROM tb_Veiculo", conn);
                if (conn != null){conn.Open();}
                SqlDataReader sdr = cmd.ExecuteReader();
                while (sdr.Read()){
                    Console.WriteLine(sdr["chassi"] + " " + sdr["marca"] + " " + sdr["modelo"] + " " + sdr["ano_fab"] + " " + sdr["ano_mod"] + " " + sdr["combustivel"]);
                }
            }
            catch (Exception ex){
                Console.WriteLine(ex.Message);
            }
            finally{
                if (conn != null){conn.Close();}
            }
        }
    }
}

Bloco de Notas e Prompt de Comando

using System;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string conStr = "data source=.\\SQLEXPRESS; database=db_Concessionaria; integrated security=SSPI";
        string sqlStr = "select * from tb_Veiculo";

        Console.WriteLine("Exemplo de consulta em C# a banco de dados Microsoft SQL Server");
        Console.WriteLine("chassi\t\t\tmarca\tmodelo\tano_fab\tano_mod\tcombustivel");

        using (SqlConnection con = new SqlConnection(conStr))
        {
            con.Open();

            using (SqlCommand cmd = new SqlCommand(sqlStr, con))
            {
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        string chassi = reader.GetString(0);
                        string marca = reader.GetString(1);
                        string modelo = reader.GetString(2);
                        int ano_fab = reader.GetInt32(3);
                        int ano_mod = reader.GetInt32(4);
                        string combustivel = reader.GetString(5);
			Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", chassi, marca, modelo, ano_fab, ano_mod, combustivel);
                    }
                }
            }
        }
    }
}

  • Sintaxe

Observe a semelhança com o código em Perl, especialmente o código mais simples, escrito no Bloco de Notas e compilado no Prompt de Comando com a instrução csc nome_do_programa.cs, que cria o programa nome_do_programa.exe.

As instruções principais estão destacadas nas listagens acima, sendo fundamentais os objetos Connection, Command e DataReader, componentes de acesso e manipulação de informações em um banco de dados.

A palavra-chave using é uma diretiva que cria um pseudônimo para um namespace ou importa tipos definidos em outros namespaces, e também instrução que define um escopo no final do qual um objeto é descartado – observe que não foi necessário fechar a conexão no segundo exemplo. Saiba mais em https://learn.microsoft.com/pt-br/dotnet/csharp/

Se você também é novato nesse mundo de dotNet framework, sugiro como leitura alternativa esse artigo da plataforma de aprendizado Alura: https://www.alura.com.br/artigos/net-framework-dotnet

  • Reflexão
Ler é perigoso!
Ler ainda pode, mas escrever é perigoso!

Os caras estão pensando em contar histórias transformadas em estórias em um dos seguintes sites. O que acham?

https://coatings.w3spaces.com/

ou

https://lcmoura.blogspot.com/

LibreOffice Base – importação de tabelas do MySQL

Olá! Hoje novamente não vamos codificar nada, mas vamos apenas usar o LibreOffice Base para conectar ao nosso banco de dados criado no MySQL, consultar uma tabela e importar seus registros. Sim, há vida lá fora, fora da Microsoft. Nada contra Bill Gates, claro.

  • Passo a passo da importação (Baby steps):
  • Reflexão

Você já ouvir falar do guarda da esquina? Na semana passada, o AI-5 fez aniversário de 55 anos, passando praticamente em branco. Perguntado se duvidava das mãos honradas do presidente, que seria o único juiz da aplicação do ato, o vice-presidente civil Pedro Aleixo respondeu: “Das mãos honradas do presidente Costa e Silva, jamais. Desconfio é do guarda da esquina”. Pelo menos desde quando a direita se infiltrou no Movimento Passe Livre, em 2013, o guarda da esquina deixou de ser apenas oficial e praça das Forças Armadas e PMs, delegado e agente de polícia, e sádico civil, geralmente de classe média. Hoje o guarda da esquina está em todo lugar; no condomínio, no clube, na igreja, na escola, na empresa. Não é apenas o ignorante de História. É o hipócrita, o traidor. É o isentão. É aquele que passou pela faculdade, mas não aprendeu nada. É aquele que tem dinheiro, mas não tem cultura. 

Microsoft Excel – Importação de tabelas do SQL Server

Olá! Hoje não vamos codificar nada, mas vamos apenas usar o Microsoft Excel para conectar ao nosso banco de dados criado no Microsoft SQL Server, consultar uma tabela e importar seus registros.

  • Passo a passo da importação
  • Reflexão

Você já ouviu falar da lenda da punhalada pelas costas? Dizem ser lenda para tentar explicar e justificar uma derrota, atribuindo o insucesso a alguém. De fato, certamente, o derrotado é que traiu a confiança de alguém. A ilustração a seguir se refere à suposta culpabilidade dos socialistas, dos bolcheviques e dos judeus na República de Weimar entre as duas Guerras Mundiais. Você sabe o que aconteceu depois, não? Se você não conhece História, digamos de forma simples que foi assim que nasceu o bolsonarismo.

Java – Conexão e consulta a banco de dados

Desta vez vamos usar Java para conectar ao nosso banco de dados e fazer uma simples consulta.

– Conexão

package furgeri12;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conecta_db{
  final String DRIVER = "com.mysql.cj.jdbc.Driver";
  final String DBNAME = "db_Concessionaria";
  final String URL = "jdbc:mysql://localhost:3306/" + DBNAME;
  final String LOGIN = "usuario";
  final String PASSWORD = "senha";
	
	public Connection abreConexao(){
    System.out.println("Consulta ao banco de dados db_Concessionaria");
	  Connection con = null;
		try{
			Class.forName(DRIVER);
			con = DriverManager.getConnection(URL, LOGIN, PASSWORD);
			System.out.println("Conexão realizada com sucesso!");
		}catch(ClassNotFoundException erro){
			System.out.println("Erro: Driver JDBC não encontrado!\n" + erro.getMessage());
		}catch(SQLException erro){
			System.out.println("Erro: Falha de conexão ao BD!\n" + erro.getMessage());
		}
		return con;
	}
	
	public void fechaConexao(Connection con){
		try{
			con.close();
			System.out.println("Conexão finalizada com sucesso!");
		}catch(SQLException erro){
			System.out.println("Erro: Falha de conexão ao BD!\n" + erro.getMessage());
		}
	}
}

– Consulta

package furgeri12;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Consulta_db{
  public static void main(String args[]){
    Conecta_db c = new Conecta_db();
    Connection con = c.abreConexao();

    try{
      Statement s = con.createStatement();
      String sql = "select * from tb_Veiculo";
      ResultSet r = s.executeQuery(sql);
      System.out.println("chassi\t\t\tmarca\tmodelo\tano_fab\tano_mod\tcombustivel"); 
      while(r.next()){
        String chassi = r.getString("chassi");
        String marca = r.getString("marca");
        String modelo = r.getString("modelo");
        String fab = Integer.toString(r.getInt("ano_fab"));
        String mod = Integer.toString(r.getInt("ano_mod"));
        String comb = r.getString("combustivel");
        System.out.println(chassi + "\t" + marca + "\t" + modelo + "\t" + fab + "\t" + mod + "\t" + comb); 
      }
    }catch(SQLException erro){
			System.out.println("Erro: Falha de conexão ao BD!\n" + erro.getMessage());
		}
    c.fechaConexao(con);
  }
}
  • Runtime
Arquivos .java estão em ~/Documentos/languages/java_files e arquivos .class estão em ~/Documentos/languages/java_files/furgeri12 com o driver mysql-connector-j-8.2.0.jar em minha Pasta pessoal do Linux

Bibliografia:

  • Java 7 Ensino Didático – Sérgio Furgeri – 2a edição, 2012 – Editora Érica Ltda.
  • Curso Prático de Java – Carla Jesus – janeiro 2013, FCA – Editora de Informática, Ltd.
  • Sintaxe

Na primeira listagem, da Conexão, 17 e 18 são as linhas mais importantes e por isso estão destacadas. Nelas o driver de conexão ao banco de dados é carregado e, em seguida, a conexão é obtida por meio do objeto Connection. Caso o driver não seja localizado e ou a conexão não seja bem sucedida, estes erros são considerados exceções tratadas por meio da estrutura try-catch.

Na segunda listagem, da Consulta, que contém a classe principal Consulta_db (contendo o método main e usando os métodos da classe Conecta_db para abrir e fechar a conexão) , 13, 14 e 15 são as linhas destacadas. Nelas, é criado o objeto statement para execução do script de comandos SQL (String sql). O resultado é armazenado no objeto ResultSet no formato de uma tabela contendo linhas (registros) e colunas (campos), a tabela mencionada na String sql.

  • Reflexão

Estas postagens não são propriamente uma espécie de curso gratuito para aprendizagem de linguagens de programação, mas compõem as folhas de um caderno de exercícios que pretendo compartilhar, para mostrar o que gosto de aprender nessa área e, talvez o mais importante, para demonstrar que virtualmente tudo é possível de se fazer, dependendo basicamente da vontade, da decisão e da atitude. E, claro, mesmo evitando proselitismo, implicitamente há um método, um ponto de vista, um viés, uma forma de encarar o mundo, as pessoas, os acontecimentos, as ideias. Incluo a seguir duas citações a respeito de atitudes.

Life is never easy. Today is difficult, tomorrow is much more difficult, but the day after tomorrow is beautiful. Most people die tomorrow evening.

“Excuses make today easy, but they make tomorrow hard. Discipline makes today hard, but it makes tomorrow easy.”

Perl – Consulta a banco de dados

Que tal usarmos Perl para consultar aquele banco de dados exemplificado em posts anteriores?

  • Design-time
use DBI;

my $dsn = 'DBI:mysql:db_Concessionaria';
my $username = 'usuario1';
my $password = 'senha1';
my $str = 'select * from tb_Veiculo';

print "Exemplo de consulta de Perl a banco de dados com MySQL\n";
print "chassi\t\t\tmarca\tmodelo\tano_fab\tano_mod\tcombustivel\n";

my $dbh = DBI->connect($dsn, $username, $password) or die "Error connecting to the database: $DBI::errstr\n";
my $sth = $dbh->prepare($str) or die "prepare statement failed: $dbh->errstr()";
$sth->execute() or die "execution failed: $dbh->errstr()"; 

my($chassi, $marca, $modelo, $ano_fab, $ano_mod, $combustivel);
while (($chassi, $marca, $modelo, $ano_fab, $ano_mod, $combustivel) = $sth->fetchrow()){
	print "$chassi\t$marca\t$modelo\t$ano_fab\t$ano_mod\t$combustivel\n";
}

$sth->finish();
$dbh->disconnect();
  • Runtime
Perl em terminal do Ubuntu 23.10 (Mantic Minotaur) – edição com Captura de Tela e Krita
  • Sintaxe

Este exercício foi baseado no texto https://www.perltutorial.org/perl-dbi/

Observe as linhas 11, 12 e 13. Nelas são definidos dois objetos, um que manipula o banco de dados ($dbh) e outro que manipula o estado ($sth).

O primeiro ($dbh) obtém o resultado da tentativa de conexão ao banco de dados através do método DBI->connect() e, em caso positivo, verifica a string contendo o comando SQL através do método prepare().

O segundo ($sth), caso a verificação da string seja bem sucedida, executa o comando SQL através do método execute(). E, finalmente (na linha 16) retorna cada registro da tabela através do método fetchrow(), dentro do laço while.

  • Reflexões

A primeira vítima de qualquer guerra é a verdade. Todo mundo, ou quase todo mundo, ficou sabendo através da mídia venal que o Hamas é uma organização terrorista. A extrema direita mundial faz questão de espalhar essa notícia, repercutida no Brasil pela base ideológica do bolsonarismo. Isto explica por que evangélicos exibem a bandeira de um estado cuja religião oficial rejeita Jesus como messias. Talvez seja a hora do gado experimentar um remédio contra a ignorância: https://www.ojp.gov/ncjrs/virtual-library/abstracts/jewish-zionist-terrorism-and-establishment-israel