next.jdbcによるデータベース接続
`next.jdbc`ライブラリを使ってデータベース接続を確立し、SQLクエリを実行する方法を学びます。
「next.jdbcによるデータベース接続」はCoddyKit上の無料Clojure Functional Programming & JVM Backend Developmentレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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.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!
よくある質問
「next.jdbcによるデータベース接続」レッスンは無料ですか?
はい。「next.jdbcによるデータベース接続」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Clojure Functional Programming & JVM Backend Developmentコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Clojure Functional Programming & JVM Backend Developmentコースには全4レッスンが含まれています。
「next.jdbcによるデータベース接続」で何を学びますか?
`next.jdbc`ライブラリを使ってデータベース接続を確立し、SQLクエリを実行する方法を学びます。 ブラウザで直接実行するハンズオンコードでClojure Functional Programming & JVM Backend Developmentを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Clojure Functional Programming & JVM Backend Developmentを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのClojure Functional Programming & JVM Backend Developmentは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「next.jdbcによるデータベース接続」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このClojure Functional Programming & JVM Backend Developmentレッスンでコードを書いて実行できますか?
はい。すべてのClojure Functional Programming & JVM Backend Developmentレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- next.jdbcによるデータベース接続
- CRUD操作の実行
- データベースマイグレーションとスキーマ管理
- コネクションプーリングとトランザクション