Connexion aux bases de données avec next.jdbc
Apprenez à établir des connexions à des bases de données et à exécuter des requêtes SQL avec la bibliothèque `next.jdbc`
Connexion aux bases de données avec next.jdbc est une leçon Clojure Functional Programming & JVM Backend Development gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Clojure Functional Programming & JVM Backend Development, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Database Access in Clojure
Welcome to connecting Clojure with databases! Most real-world applications need to store and retrieve data, and databases are central to this.
In this lesson, you'll learn how to use next.jdbc, Clojure's popular library, to interact with various databases.
Meet next.jdbc
next.jdbc is a modern, idiomatic Clojure wrapper for JDBC (Java Database Connectivity). JDBC is the standard Java API for connecting to relational databases.
- It simplifies database operations.
- It provides a clean, functional interface.
- It's fast and efficient.
- It supports a wide range of databases (PostgreSQL, MySQL, H2, SQLite, etc.).
Adding Dependencies
Before we write any code, we need to add next.jdbc and a database driver to our project's dependencies. We'll use H2, an in-memory database, for easy examples.
Add these to your deps.edn file:
{:deps {org.clojure/clojure {:mvn/version "1.11.1"}
seancorfield/next.jdbc {:mvn/version "1.3.909"}
com.h2database/h2 {:mvn/version "2.2.220"}}}The Connection String (JDBC URL)
To connect to a database, you need a JDBC URL. This string tells next.jdbc (and the underlying JDBC driver) how to find and connect to your database.
For an in-memory H2 database, a common URL looks like this:
jdbc:h2:mem:testdb: Connects to an H2 database named 'testdb' in memory.jdbc:sqlite:my-data.db: Connects to a SQLite file.jdbc:postgresql://localhost/mydb: Connects to a PostgreSQL database.
Establishing a Datasource
A datasource is an object that represents a connection pool or factory for database connections. It's usually created once and reused.
next.jdbc's get-datasource function takes a map of connection parameters, including the JDBC URL.
Getting a Connection with <code>with-open</code>
After getting a datasource, you can obtain a connection. It's crucial to close connections after use to free up resources.
Clojure's with-open macro is perfect for this. It ensures that resources like database connections are automatically closed when they go out of scope.
Runnable: Connect & Disconnect
Let's see how to establish and close a database connection using next.jdbc and an in-memory H2 database. Run this code:
(ns my-app.core
(:require [next.jdbc :as jdbc]))
(defn -main
"Connects to an H2 in-memory database and closes the connection."
[]
(let [db-spec {:dbtype "h2" :dbname "mem:testdb"}]
(println "Attempting to connect...")
(with-open [conn (jdbc/get-connection db-spec)]
(println "Successfully connected to H2!\nConnection object:")
(println conn))
(println "Connection closed.")))
(-main)Executing Simple SQL Queries
Once connected, you can execute SQL queries. next.jdbc provides functions like jdbc/execute! for DDL (Data Definition Language) and DML (Data Manipulation Language) operations, and jdbc/execute-one! for queries expecting a single row result.
Queries are passed as vectors, with the SQL string followed by any parameters.
Runnable: Execute a Query
Now, let's create a table and insert some data into our in-memory H2 database, then query it. Notice how execute! returns a vector of maps.
(ns my-app.core
(:require [next.jdbc :as jdbc]))
(defn -main
"Connects, creates a table, inserts data, and queries it."
[]
(let [db-spec {:dbtype "h2" :dbname "mem:testdb"}]
(with-open [conn (jdbc/get-connection db-spec)]
(println "Connected. Creating table...")
(jdbc/execute! conn ["CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY, name VARCHAR(255))"])
(println "Table created. Inserting data...")
(jdbc/execute! conn ["INSERT INTO users (id, name) VALUES (?, ?)" 1 "Alice"])
(jdbc/execute! conn ["INSERT INTO users (id, name) VALUES (?, ?)" 2 "Bob"])
(println "Data inserted. Querying data...")
(let [result (jdbc/execute! conn ["SELECT id, name FROM users"])]
(println "Query Result:")
(doseq [row result] (println row))))
(println "Operations complete. Connection closed.")))
(-main)Quick Check on Connections
What is the primary purpose of using with-open when dealing with database connections in Clojure?
Recap: Connecting to Databases
You've taken the first step into database interaction with Clojure!
- We introduced
next.jdbcas a powerful library for database access. - You learned how to add necessary dependencies (
next.jdbcand a JDBC driver like H2). - We covered JDBC URLs and how to establish a datasource and connection.
- You saw how
with-openensures connections are properly managed. - Finally, we executed basic DDL and DML queries using
jdbc/execute!.
Next, we'll dive deeper into CRUD operations!
Questions Fréquemment Posées
La leçon « Connexion aux bases de données avec next.jdbc » est-elle gratuite ?
Oui — le texte complet de « Connexion aux bases de données avec next.jdbc » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Clojure Functional Programming & JVM Backend Development, passe à CoddyKit PRO. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Connexion aux bases de données avec next.jdbc » ?
Apprenez à établir des connexions à des bases de données et à exécuter des requêtes SQL avec la bibliothèque `next.jdbc` Tu pratiques Clojure Functional Programming & JVM Backend Development avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Clojure Functional Programming & JVM Backend Development ?
Aucune expérience préalable n'est requise. Clojure Functional Programming & JVM Backend Development sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Connexion aux bases de données avec next.jdbc » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Clojure Functional Programming & JVM Backend Development ?
Oui. Chaque leçon Clojure Functional Programming & JVM Backend Development inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Connexion aux bases de données avec next.jdbc
- Effectuer des opérations CRUD
- Migrations de bases de données et gestion des schémas
- Mise en commun des connexions et transactions