[JDBC] J'ai essayé de faire de l'accès à la base de données SQLite3 depuis Java une méthode pour chaque instruction SQL.

Dans Article précédent, j'ai réussi à accéder à la base de données SQLite depuis Java en utilisant JDBC. Comme je devais préparer une base de données à l'avance et écrire une instruction SELECT dans un programme Java pour acquérir des données de la base de données, je suis allé plus loin et j'ai incorporé une instruction INSERT, une instruction UPDATE, une instruction DELETE, etc. en plus de l'instruction SELECT. J'ai essayé de contester.

environnement

L'environnement de développement cette fois-ci est le suivant.


Exemple de code référencé

Puisque je voulais utiliser plusieurs instructions SQL cette fois, je vais en faire une méthode basée sur l'exemple de code dans le README du référentiel JDBC.

Exemple de code source de référence


import java.sql.*;

public class Sample
{
  public static void main(String[] args) throws ClassNotFoundException
  {
    // load the sqlite-JDBC driver using the current class loader
    Class.forName("org.sqlite.JDBC");

    Connection connection = null;
    try
    {
      // create a database connection
      connection = DriverManager.getConnection("jdbc:sqlite:sample.db");
      Statement statement = connection.createStatement();
      statement.setQueryTimeout(30);  // set timeout to 30 sec.

      statement.executeUpdate("drop table if exists person");
      statement.executeUpdate("create table person (id integer, name string)");
      statement.executeUpdate("insert into person values(1, 'leo')");
      statement.executeUpdate("insert into person values(2, 'yui')");
      ResultSet rs = statement.executeQuery("select * from person");
      while(rs.next())
      {
        // read the result set
        System.out.println("name = " + rs.getString("name"));
        System.out.println("id = " + rs.getInt("id"));
      }
    }
    catch(SQLException e)
    {
      // if the error message is "out of memory", 
      // it probably means no database file is found
      System.err.println(e.getMessage());
    }
    finally
    {
      try
      {
        if(connection != null)
          connection.close();
      }
      catch(SQLException e)
      {
        // connection close failed.
        System.err.println(e);
      }
    }
  }
}

Créer une méthode pour chaque instruction SQL

L'exemple de code ci-dessus accède à la base de données → supprime la table → crée la table → entre les données → lit toutes les données dans la méthode principale. Dans un programme réel, chaque opération est effectuée séparément, donc je pense qu'il est plus réaliste de les transformer en méthodes et de les appeler à la méthode principale si nécessaire.

Le code que j'ai transformé en méthode est le suivant. Les noms de la base de données ont été modifiés selon les besoins pour les rendre plus faciles à comprendre.

Code méthodisé


import java.sql.*;

/**
 * TestDataBaseAccess
 */
public class TestDataBaseAccess {
    static Connection connection;
    static String URL = "jdbc:sqlite:sample.db";

    public static void main(String[] args) throws ClassNotFoundException {
       // load the sqlite-JDBC driver using the current class loader
        Class.forName("org.sqlite.JDBC");
        connection = null;
        
        dropTable();
        createTable();
        insertData();
        loadData();

        updateData();
        loadData();

        deleteData();
        loadData();
    }
    /**
     *Instruction SELECT
     */
    public static void loadData() {
        try {
            // create a database connection
            connection = DriverManager.getConnection(URL);
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec.

            ResultSet rs = statement.executeQuery("SELECT * FROM person");
            while(rs.next()){
                // read the result set
                System.out.println("id = " + rs.getInt("id") + " | name = " + rs.getString("name"));
            }
        } catch(SQLException e) {
            // if the error message is "out of memory", 
            // it probably means no database file is found
            System.err.println(e.getMessage());
        } finally {
            try {
                if(connection != null)
                connection.close();
            } catch(SQLException e) {
                // connection close failed.
                System.err.println(e);
            }
        }
    }

    /**
     *Instruction INSERT
     */
    public static void insertData() {
        try {
            // create a database connection
            connection = DriverManager.getConnection(URL);
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec.

            statement.executeUpdate("INSERT INTO person VALUES(1, 'Satou')");
            statement.executeUpdate("INSERT INTO person VALUES(2, 'Tanaka')");
            statement.executeUpdate("INSERT INTO person VALUES(3, 'Suzuki')");
            
            
        } catch(SQLException e) {
            // if the error message is "out of memory", 
            // it probably means no database file is found
            System.err.println(e.getMessage());
        } finally {
            try {
                if(connection != null)
                connection.close();
            } catch(SQLException e) {
                // connection close failed.
                System.err.println(e);
            }
        }
    }

    /**
     *Instruction UPDATE
     */
    public static void updateData() {
        try {
            // create a database connection
            connection = DriverManager.getConnection(URL);
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec.

            statement.executeUpdate("UPDATE person SET name = 'Takahashi' WHERE id = 1");            
        } catch(SQLException e) {
            // if the error message is "out of memory", 
            // it probably means no database file is found
            System.err.println(e.getMessage());
        } finally {
            try {
                if(connection != null)
                connection.close();
            } catch(SQLException e) {
                // connection close failed.
                System.err.println(e);
            }
        }
    }

    /**
     *Instruction DELETE
     */
    public static void deleteData() {
        try {
            // create a database connection
            connection = DriverManager.getConnection(URL);
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec.

            statement.executeUpdate("DELETE FROM person WHERE id = 3");            
        } catch(SQLException e) {
            // if the error message is "out of memory", 
            // it probably means no database file is found
            System.err.println(e.getMessage());
        } finally {
            try {
                if(connection != null)
                connection.close();
            } catch(SQLException e) {
                // connection close failed.
                System.err.println(e);
            }
        }
    }

    /**
     *Créer une table
     */
    public static void createTable() {
        try {
            // create a database connection
            connection = DriverManager.getConnection(URL);
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec.

            statement.executeUpdate("CREATE TABLE person (id INTEGER, name STRING)");
        } catch(SQLException e) {
            // if the error message is "out of memory", 
            // it probably means no database file is found
            System.err.println(e.getMessage());
        } finally {
            try {
                if(connection != null)
                connection.close();
            } catch(SQLException e) {
                // connection close failed.
                System.err.println(e);
            }
        }
    }

    /**
     *Supprimer la table
     */
    public static void dropTable() {
        try {
            // create a database connection
            connection = DriverManager.getConnection(URL);
            Statement statement = connection.createStatement();
            statement.setQueryTimeout(30);  // set timeout to 30 sec.

            statement.executeUpdate("DROP TABLE IF EXISTS person");
        } catch(SQLException e) {
            // if the error message is "out of memory", 
            // it probably means no database file is found
            System.err.println(e.getMessage());
        } finally {
            try {
                if(connection != null)
                connection.close();
            } catch(SQLException e) {
                // connection close failed.
                System.err.println(e);
            }
        }
    }
}

Après en avoir fait une méthode, j'ai appelé le flux de processus à la méthode principale.

Résultat d'exécution


id = 1 | name = Satou
id = 2 | name = Tanaka
id = 3 | name = Suzuki
id = 1 | name = Takahashi
id = 2 | name = Tanaka
id = 3 | name = Suzuki
id = 1 | name = Takahashi
id = 2 | name = Tanaka

Résumé

J'ai réussi à faire de chaque instruction SQL une méthode et à l'appeler à la méthode principale si nécessaire. Lorsqu'il s'agissait de SQL, il semblait qu'une erreur se produirait si vous n'essayiez pas d'attraper chaque méthode. Cependant, à l'heure actuelle, puisque le contenu et les changements d'entrée des données sont définis dans la méthode, la réutilisabilité est faible et elle est encore incomplète. Sur la base de ce code, je vais en faire un code réutilisable.


Site de référence

Recommended Posts

[JDBC] J'ai essayé de faire de l'accès à la base de données SQLite3 depuis Java une méthode pour chaque instruction SQL.
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
J'ai essayé de frapper une méthode Java d'ABCL
J'ai essayé de créer une fonction de connexion avec Java
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
J'ai créé un client RESAS-API en Java
Création d'une méthode pour demander Premium Friday (version Java 8)
Comment faire un diamant révolutionnaire en utilisant Java pour déclaration wwww
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
J'ai essayé de faire une authentification de base avec Java
Je l'ai fait en Java pour toujours rendre (a == 1 && a == 2 && a == 3) vrai
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Je veux écrire rapidement de java vers sqlite
[Azure] J'ai essayé de créer une application Java pour la création d'applications Web gratuites - [Débutant]
[Petite histoire] J'ai essayé de rendre java ArrayList un peu plus pratique
J'ai essayé de casser le bloc avec java (1)
[JDBC ③] J'ai essayé d'entrer à partir de la méthode principale en utilisant des espaces réservés et des arguments.
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
Comment passer d'Eclipse Java à un fichier SQL
J'ai fait une méthode pour demander la prime vendredi
[Bases de Java] Créons un triangle avec une instruction for
J'ai essayé de créer une compétence Clova en Java
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
J'ai essayé d'utiliser l'instruction Extended for en Java
Comment faire une boucle Java Map (for Each / extended for statement)
J'ai essayé de convertir l'exemple d'application en microservice selon l'idée du livre "Microservice Architecture".
[Java] J'ai essayé de créer un jeu Janken que les débutants peuvent exécuter sur la console
J'ai essayé de faire une demande en 3 mois d'inexpérimenté
[Java] Rendre les variables de l'instruction for étendue et de chaque instruction immuables
J'ai essayé de moderniser une application Java EE avec OpenShift.
Je veux faire une liste avec kotlin et java!
Je voulais juste créer une propriété réactive en Java
Je veux créer une fonction avec kotlin et java!
J'ai essayé de faire coexister Java Optional et la clause de garde
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
[Unity] J'ai essayé de créer un plug-in natif UniNWPathMonitor en utilisant NWPathMonitor
Connexion à une base de données avec Java (partie 1) Peut-être la méthode de base
J'ai essayé de créer une application Android avec MVC maintenant (Java)
J'ai essayé de générer une source de programme en langage C à partir de cURL
Une histoire que j'ai finalement comprise Java pour une déclaration en tant que non-ingénieur
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
Comment créer un conteneur Java
Comment créer un pilote JDBC
J'ai essayé d'interagir avec Java
Accéder à Teradata depuis une application Java
J'ai essayé d'expliquer la méthode
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
Comment créer un tableau Java
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
J'ai essayé de créer une simple application Android de reconnaissance faciale en utilisant OpenCV
[Java] Comment transformer un tableau à deux dimensions avec une instruction for étendue
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
J'ai essayé de créer une API Web qui se connecte à DB avec Quarkus
Un débutant Java a essayé de créer une application Web simple à l'aide de Spring Boot
J'ai créé un bot de transaction d'arbitrage de monnaie virtuelle et essayé de gagner de l'argent
J'ai essayé de créer une méthode qui applique plusieurs filtres à la fois avec l'API Java Stream. Cela vous convient-il?
Quand j'ai voulu créer une méthode pour Premium Friday, c'était déjà dans l'API standard Java 8