Clojure Functional Programming & JVM Backend Development · Урок

Подключение к базам данных с next.jdbc

Научитесь устанавливать соединения с базами данных и выполнять SQL-запросы с помощью библиотеки `next.jdbc`.

Урок 1 из 411 шагов

«Подключение к базам данных с next.jdbc» — бесплатный урок Clojure Functional Programming & JVM Backend Development на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Clojure Functional Programming & JVM Backend Development, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Clojure Functional Programming & JVM Backend Development содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

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.jdbc as a powerful library for database access.
  • You learned how to add necessary dependencies (next.jdbc and a JDBC driver like H2).
  • We covered JDBC URLs and how to establish a datasource and connection.
  • You saw how with-open ensures connections are properly managed.
  • Finally, we executed basic DDL and DML queries using jdbc/execute!.

Next, we'll dive deeper into CRUD operations!

Можно начать бесплатно

Изучай Clojure с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
12
Уроки
48

Часто задаваемые вопросы

Урок «Подключение к базам данных с next.jdbc» бесплатный?

Да — полный текст урока «Подключение к базам данных с next.jdbc» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Clojure Functional Programming & JVM Backend Development, подпишись на CoddyKit PRO. Курс Clojure Functional Programming & JVM Backend Development содержит 4 уроков всего.

Чему я научусь в уроке «Подключение к базам данных с next.jdbc»?

Научитесь устанавливать соединения с базами данных и выполнять SQL-запросы с помощью библиотеки `next.jdbc`. Ты практикуешь Clojure Functional Programming & JVM Backend Development с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Clojure Functional Programming & JVM Backend Development?

Предыдущий опыт не требуется. Clojure Functional Programming & JVM Backend Development на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Подключение к базам данных с next.jdbc»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Clojure Functional Programming & JVM Backend Development?

Да. Каждый урок Clojure Functional Programming & JVM Backend Development включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Подключение к базам данных с next.jdbc
  2. Выполнение операций CRUD
  3. Миграции баз данных и управление схемой
  4. Пулы соединений и транзакции
← Назад к Clojure Functional Programming & JVM Backend Development