In this section, we will explore how to interact with databases using Groovy. We will cover the following topics:
- Introduction to Database Access in Groovy
 - Setting Up the Database Environment
 - Connecting to a Database
 - Executing SQL Queries
 - Handling Results
 - Practical Exercises
 
- Introduction to Database Access in Groovy
 
Groovy provides several ways to interact with databases, including:
- Groovy SQL: A built-in library that simplifies database operations.
 - GORM (Grails Object Relational Mapping): Part of the Grails framework, which provides a higher-level abstraction for database operations.
 
In this section, we will focus on using Groovy SQL for database access.
- Setting Up the Database Environment
 
Before we can interact with a database, we need to set up our environment. This includes:
- Installing a database (e.g., MySQL, PostgreSQL, SQLite)
 - Setting up a database and creating tables
 - Adding necessary dependencies to our Groovy project
 
Example: Setting Up SQLite
- Install SQLite: Follow the instructions on the SQLite website to install SQLite on your system.
 - Create a Database: Use the SQLite command-line tool to create a new database.
sqlite3 mydatabase.db - Create a Table: Create a table to store data.
CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT NOT NULL ); 
Adding Dependencies
Add the following dependencies to your build.gradle file if you are using Gradle:
dependencies {
    implementation 'org.xerial:sqlite-jdbc:3.34.0'
    implementation 'org.codehaus.groovy:groovy-sql:3.0.8'
}
- Connecting to a Database
 
To connect to a database using Groovy SQL, we need to create a Sql instance.
Example: Connecting to SQLite
@GrabConfig(systemClassLoader=true)
@Grab('org.xerial:sqlite-jdbc:3.34.0')
@Grab('org.codehaus.groovy:groovy-sql:3.0.8')
import groovy.sql.Sql
def dbUrl = 'jdbc:sqlite:mydatabase.db'
def sql = Sql.newInstance(dbUrl, 'org.sqlite.JDBC')
println "Connected to the database successfully!"
- Executing SQL Queries
 
Once connected, we can execute SQL queries to interact with the database.
Example: Inserting Data
sql.execute("INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]')")
println "Data inserted successfully!"Example: Selecting Data
def result = sql.rows("SELECT * FROM users")
result.each { row ->
    println "ID: ${row.id}, Name: ${row.name}, Email: ${row.email}"
}
- Handling Results
 
Groovy SQL provides several methods to handle query results, such as rows, eachRow, and firstRow.
Example: Using eachRow
sql.eachRow("SELECT * FROM users") { row ->
    println "ID: ${row.id}, Name: ${row.name}, Email: ${row.email}"
}Example: Using firstRow
def firstUser = sql.firstRow("SELECT * FROM users")
println "First User - ID: ${firstUser.id}, Name: ${firstUser.name}, Email: ${firstUser.email}"
- Practical Exercises
 
Exercise 1: Create and Populate a Table
- Create a new table called 
productswith the following columns:id,name,price. - Insert three products into the 
productstable. - Select and print all products from the 
productstable. 
Solution
// Create the products table
sql.execute("""
    CREATE TABLE products (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        price REAL NOT NULL
    )
""")
// Insert products
sql.execute("INSERT INTO products (name, price) VALUES ('Product 1', 19.99)")
sql.execute("INSERT INTO products (name, price) VALUES ('Product 2', 29.99)")
sql.execute("INSERT INTO products (name, price) VALUES ('Product 3', 39.99)")
// Select and print all products
sql.eachRow("SELECT * FROM products") { row ->
    println "ID: ${row.id}, Name: ${row.name}, Price: ${row.price}"
}Exercise 2: Update and Delete Data
- Update the price of 
Product 1to24.99. - Delete 
Product 2from theproductstable. - Select and print all remaining products.
 
Solution
// Update the price of Product 1
sql.execute("UPDATE products SET price = 24.99 WHERE name = 'Product 1'")
// Delete Product 2
sql.execute("DELETE FROM products WHERE name = 'Product 2'")
// Select and print all remaining products
sql.eachRow("SELECT * FROM products") { row ->
    println "ID: ${row.id}, Name: ${row.name}, Price: ${row.price}"
}Conclusion
In this section, we learned how to:
- Set up the database environment
 - Connect to a database using Groovy SQL
 - Execute SQL queries to insert, select, update, and delete data
 - Handle query results
 
These skills are essential for interacting with databases in Groovy applications. In the next section, we will explore working with XML and JSON in Groovy.
