Tags: Java

Java: pobierz liczbę rekordów dla wszystkich tabel w bazie danych MySQL

Aby pobrać liczbę rekordów dla wszystkich tabel w bazie danych MySQL przy użyciu języka Java, będziesz musiał wykonać kilka kroków. Poniżej znajduje się szczegółowy opis tego procesu:

Ustaw połączenie z bazą danych

Musisz ustanowić połączenie z bazą danych MySQL przy użyciu JDBC (Java Database Connectivity). Wymaga to dodania sterownika JDBC dla MySQL do ścieżki klas projektu. Możesz to zrobić, dodając zależność Maven lub pobierając i dodając JAR do projektu manualnie.

Jeśli używasz Mavena, dodaj następującą zależność do pliku `pom.xml`:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version> <!-- Użyj aktualnej wersji -->
</dependency>

Załaduj sterownik JDBC i ustanow połączenie

Napisz kod, który załaduje sterownik MySQL JDBC i ustanowi połączenie z bazą danych.

import java.sql.*;

public class DatabaseTableCounts {
    public static void main(String[] args) {
        // Dane dostępowe do bazy danych
        String url = "jdbc:mysql://localhost:3306/nazwa_bazy_danych";
        String user = "username";
        String password = "password";

        // Łączenie z bazą danych
        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            // Połączenie ustanowione
        } catch (SQLException e) {
            e.printStackTrace();
            return;
        }
    }
}

Pobierz nazwy tabel i wykonaj zapytania

Następnie użyj obiektu `Connection` do pobrania metadanych bazy danych, a następnie wykonaj zapytania SQL, aby pobrać liczbę rekordów dla każdej tabeli.

// Kontynuacja w bloku try

DatabaseMetaData metaData = connection.getMetaData();
ResultSet tables = metaData.getTables(null, null, "%", new String[] {"TABLE"});

while (tables.next()) {
    String tableName = tables.getString(3);
    String countQuery = "SELECT COUNT(*) FROM " + tableName;

    try (Statement countStmt = connection.createStatement();
         ResultSet countResult = countStmt.executeQuery(countQuery)) {
        if (countResult.next()) {
            int count = countResult.getInt(1);
            System.out.println("Tabela: " + tableName + ", Liczba rekordów: " + count);
        }
    } catch (SQLException e) {
        System.out.println("Nie można pobrać liczby rekordów dla tabeli: " + tableName);
        e.printStackTrace();
    }
}

Ważne kwestie bezpieczeństwa

- Upewnij się, że przetwarzasz nazwy tabel w bezpieczny sposób, aby uniknąć ataków iniekcji SQL.
- Nigdy nie buduj zapytań SQL poprzez bezpośrednie łączenie ciągów z danymi wejściowymi od użytkownika.
- W przykładzie powyżej zakładamy, że nazwy tabel są bezpieczne, ponieważ pochodzą z metadanych bazy danych.

Obsługa wyjątków

- Upewnij się, że poprawnie obsługujesz wyjątki, w tym `SQLException`, które mogą być rzucane podczas pracy z JDBC.
- W powyższym przykładzie używamy try-with-resources dla automatycznego zamknięcia `Connection`, `Statement`, i `ResultSet`.

Sterownik i wersja

- Upewnij się, że używasz aktualnej wersji sterownika JDBC dla MySQL, kompatybilnej z wersją Java używaną w projekcie oraz wersją serwera MySQL.

Po wykonaniu powyższych kroków, program powinien wyświetlić liczbę rekordów dla każdej tabeli w podanej bazie danych MySQL.