DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workloads.

Related

  • CRUD REST API With Jakarta Core Profile Running on Java SE
  • Exploring Hazelcast With Spring Boot
  • How To Add Three Photo Filters to Your Applications in Java
  • How To Validate Names Using Java

Trending

  • Endpoint Security Controls: Designing a Secure Endpoint Architecture, Part 2
  • AWS to Azure Migration: A Cloudy Journey of Challenges and Triumphs
  • How to Perform Custom Error Handling With ANTLR
  • Data Quality: A Novel Perspective for 2025
  1. DZone
  2. Software Design and Architecture
  3. Integration
  4. Simplifying Database Operations With HarperDB SDK for Java

Simplifying Database Operations With HarperDB SDK for Java

In this hands-on session, explore how HarperDB SDK for Java streamlines NoSQL integration, abstracts HTTP complexities, and enables efficient CRUD operations.

By 
Otavio Santana user avatar
Otavio Santana
DZone Core CORE ·
Dec. 15, 23 · Tutorial
Likes (4)
Comment
Save
Tweet
Share
7.1K Views

Join the DZone community and get the full member experience.

Join For Free

In the dynamic landscape of modern application development, efficient and seamless interaction with databases is paramount. HarperDB, with its NoSQL capabilities, provides a robust solution for developers. To streamline this interaction, the HarperDB SDK for Java offers a convenient interface for integrating Java applications with HarperDB.

This article is a comprehensive guide to getting started with the HarperDB SDK for Java. Whether you're a seasoned developer or just diving into the world of databases, this SDK aims to simplify the complexities of database management, allowing you to focus on HarperDB's NoSQL features.

Motivation for Using HarperDB SDK

Before delving into the intricacies of the SDK, let's explore the motivations behind its usage. The SDK is designed to provide a straightforward pathway for Java applications to communicate with HarperDB via HTTP requests. By abstracting away the complexities of raw HTTP interactions, developers can concentrate on leveraging the NoSQL capabilities of HarperDB without dealing with the intricacies of manual HTTP requests.

In the fast-paced realm of software development, time is a precious resource. The HarperDB SDK for Java is a time-saving solution designed to accelerate the integration of Java applications with HarperDB. Rather than reinventing the wheel by manually crafting HTTP requests and managing the intricacies of communication with HarperDB, the SDK provides a high-level interface that streamlines these operations.

By abstracting away the complexities of low-level HTTP interactions, developers can focus their efforts on building robust applications and leveraging the powerful NoSQL capabilities of HarperDB. It expedites the development process and enhances code maintainability, allowing developers to allocate more time to core business logic and innovation.

The motivation for utilizing HTTP as the communication protocol between Java applications and HarperDB is rooted in efficiency, security, and performance considerations. While SQL is a widely adopted language for querying and managing relational databases, the RESTful HTTP interface provided by HarperDB offers distinct advantages.

The purpose of this guide is to shed light on the functionality of HarperDB in the context of supported SQL operations. It's essential to note that the SQL parser within HarperDB is an evolving feature, and not all SQL functionalities may be fully optimized or utilize indexes. As a result, the REST interface emerges as a more stable, secure, and performant option for interacting with data.

The RESTful nature of HTTP communication aligns with modern development practices, providing a scalable and straightforward approach to data interaction. The stability and security inherent in the RESTful architecture make it an attractive choice for integrating Java applications with HarperDB.

While the SQL functionality in HarperDB can benefit administrative ad-hoc querying and leveraging existing SQL statements, the guide emphasizes the advantages of the RESTful HTTP interface for day-to-day data operations. As features and functionality evolve, the guide will be updated to reflect the latest capabilities of HarperDB.

The motivation for using the HarperDB SDK and opting for HTTP communication lies in the quest for efficiency, security, and a more streamlined development experience. This guide aims to empower developers to make informed choices and harness the full potential of HarperDB's NoSQL capabilities while navigating the evolving landscape of SQL functionality.

We understand the motivation behind employing the HarperDB SDK for Java and choosing HTTP as the communication protocol, which lays a solid foundation for an efficient and streamlined development process. The SDK is a valuable tool to save time and simplify complex interactions with HarperDB, allowing developers to focus on innovation rather than the intricacies of low-level communication. As we embark on the hands-on session on the following topic, we will delve into practical examples and guide you through integrating the SDK into your Java project. Let's dive into the hands-on session to bring theory into practice and unlock the full potential of HarperDB for your Java applications.

Hands-On Session: Building a Simple Java SE Application with HarperDB

In this hands-on session, we'll guide you through creating a simple Java SE application that performs CRUD operations using the HarperDB SDK. Before we begin, ensure you have a running instance of HarperDB. For simplicity, we'll use a Docker instance with the following command:

Shell
 
docker run -d -e HDB_ADMIN_USERNAME=root -e HDB_ADMIN_PASSWORD=password -e HTTP_THREADS=4 -p 9925:9925 -p 9926:9926 harperdb/harperdb


This command sets up a HarperDB instance with a root username and password for administration. The instance will be accessible on ports 9925 and 9926.

Now, let's proceed with building our Java application. We'll focus on CRUD operations for a straightforward entity—Beer. Throughout this session, we'll demonstrate the seamless integration of the HarperDB SDK into a Java project.

To kickstart our project, we’ll create a Maven project and include the necessary dependencies—HarperDB SDK for Java and DataFaker for generating beer data.

Create a Maven Project

Open your preferred IDE or use the command line to create a new Maven project. If you’re using an IDE, there is typically an option to create a new Maven project. If you’re using the command line, you can use the following command:

Shell
 
   mvn archetype:generate -DgroupId=com.example -DartifactId=harperdb-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false


  1. Replace com.example with your desired package name and harperdb-demo with the name of your project.

  2. Include dependencies in pom.xml:

Open the pom.xml file in your project and include the following dependencies:

XML
 
   <dependencies>
       <dependency>
           <groupId>expert.os.harpderdb</groupId>
           <artifactId>harpderdb-core</artifactId>
           <version>0.0.1</version>
       </dependency>
       <dependency>
           <groupId>net.datafaker</groupId>
           <artifactId>datafaker</artifactId>
           <version>2.0.2</version>
       </dependency>
   </dependencies>


Create the Beer Entity

In your src/main/java/com/example directory, create a new Java file named Beer.java. Define the Beer entity as a record, taking advantage of the immutability provided by records. Additionally, include a static factory method to create a Beer instance using DataFaker:

Java
 
   package com.example;

   import net.datafaker.Faker;

   public record Beer(String id, String name, String style, String brand) {

       static Beer of(Faker faker) {
           String id = faker.idNumber().valid();
           String name = faker.beer().name();
           String style = faker.beer().style();
           String brand = faker.beer().brand();
           return new Beer(id, name, style, brand);
       }
   }


With these initial steps, you’ve set up a Maven project, included the required dependencies, and defined a simple immutable Beer entity using a record. The next phase involves leveraging the HarperDB SDK to perform CRUD operations with this entity, showcasing the seamless integration between Java and HarperDB. Let’s proceed to implement the interaction with HarperDB in the subsequent steps of our hands-on session.

The Server and Template classes are fundamental components of the HarperDB SDK for Java, providing a seamless interface for integrating Java applications with HarperDB’s NoSQL database capabilities. Let’s delve into the purpose and functionality of each class.

Server Class

The Server class is the entry point for connecting with a HarperDB instance. It encapsulates operations related to server configuration, database creation, schema definition, table creation, and more. Using the ServerBuilder, users can easily set up the connection details, including the host URL and authentication credentials.

Key features of the Server class:

  • Database management: Create, delete, and manage databases.
  • Schema definition: Define schemas within databases.
  • Table operations: Create tables with specified attributes.
  • Credential configuration: Set up authentication credentials for secure access.

Template Class

The Template class is a high-level abstraction for performing CRUD (Create, Read, Update, Delete) operations on Java entities within HarperDB. It leverages Jackson’s JSON serialization to convert Java objects to JSON, facilitating seamless communication with HarperDB via HTTP requests.

Key features of the Template class:

  • Entity operations: Perform CRUD operations on Java entities.
  • ID-based retrieval: Retrieve entities by their unique identifiers.
  • Integration with Server: Utilize a configured Server instance for database interaction.
  • Type-Safe operations: Benefit from type safety when working with Java entities.

Together, the Server and Template classes provide a robust foundation for developers to integrate their Java applications with HarperDB effortlessly. In the subsequent sections, we’ll explore practical code examples to illustrate the usage of these classes in real-world scenarios, showcasing the simplicity and power of the HarperDB SDK for Java. Let’s delve into the code and discover the capabilities these classes bring to your Java projects.

In this session, we’ll execute a comprehensive code example to demonstrate the functionality of the HarperDB SDK for Java. The code below showcases a practical scenario where we create a database, define a table, insert a beer entity, retrieve it by ID, delete it, and then confirm its absence.

Java
 
public static void main(String[] args) {
    // Create a Faker instance for generating test data
    Faker faker = new Faker();

    // Configure HarperDB server with credentials
    Server server = ServerBuilder.of("http://localhost:9925")
            .withCredentials("root", "password");

    // Create a database and table
    server.createDatabase("beers");
    server.createTable("beer").id("id").database("beers");

    // Obtain a Template instance for the "beers" database
    Template template = server.template("beers");

    // Generate a random beer entity
    Beer beer = Beer.of(faker);

    // Insert the beer entity into the "beer" table
    template.insert(beer);

    // Retrieve the beer by its ID and print it
    template.findById(Beer.class, beer.id()).ifPresent(System.out::println);

    // Delete the beer entity by its ID
    template.delete(Beer.class, beer.id());

    // Attempt to retrieve the deleted beer and print a message
    template.findById(Beer.class, beer.id())
            .ifPresentOrElse(
                    System.out::println,
                    () -> System.out.println("Beer not found after deletion")
            );
}


Explanation of the code:

  1. Faker instance: We use the Faker library to generate random test data, including the details of a beer entity.

  2. Server configuration: The Server instance is configured with the HarperDB server’s URL and authentication credentials (username: root, password: password).

  3. Database and table creation: We create a database named “beers” and define a table within it named “beer” with an “id” attribute.

  4. Template instance: The Template instance is obtained from the configured server, specifically for the “beers” database.

  5. Beer entity operations:

    • Insertion: A randomly generated beer entity is inserted into the “beer” table.

    • Retrieval: The inserted beer is retrieved by its ID and printed.

    • Deletion: The beer entity is deleted by its ID.

  6. Confirmation of deletion: We attempt to retrieve the deleted beer entity and print a message confirming its absence.

This code provides a hands-on exploration of the core CRUD operations supported by the HarperDB SDK for Java. By running this code, you’ll witness the seamless integration of Java applications with HarperDB, making database interactions straightforward and efficient. Let’s execute and observe the SDK in action!

In this hands-on session, we executed a concise yet comprehensive code example that showcased the power and simplicity of the HarperDB SDK for Java. By creating a database, defining a table, and manipulating beer entities, we explored the SDK's capability to integrate Java applications with HarperDB's NoSQL features seamlessly. The demonstrated operations, including insertion, retrieval, and deletion, underscored the SDK's user-friendly approach to handling CRUD functionalities. This session offered a practical glimpse into the ease of use and effectiveness of the HarperDB SDK to Java developers, making database interactions a seamless part of application development. As we proceed, we'll delve deeper into more advanced features and scenarios, building on this foundation to empower developers in leveraging HarperDB's capabilities within their Java projects.

Conclusion

In conclusion, this article has thoroughly explored the HarperDB SDK for Java, showcasing its capabilities in simplifying the integration of Java applications with HarperDB’s NoSQL database. From understanding the core classes like Server and Template to executing practical CRUD operations with a sample beer entity, we’ve witnessed the user-friendly nature of the SDK. By choosing the HarperDB SDK, developers can streamline database interactions, focusing more on application logic and less on intricate database configurations.

For those eager to dive deeper, the accompanying GitHub repository contains the complete source code used in the hands-on session. Explore, experiment, and adapt the code to your specific use cases.

Additionally, the official HarperDB Documentation serves as an invaluable resource, offering in-depth insights into the NoSQL operations API, making it an excellent reference for further exploration.

As you embark on your journey with HarperDB and Java, remember that this SDK empowers developers, providing a robust and efficient bridge between Java applications and HarperDB’s NoSQL capabilities. Whether you’re building a small-scale project or a large-scale enterprise application, the HarperDB SDK for Java stands ready to enhance your development experience.

Apache Maven REST Software development kit Java (programming language) NoSQL

Opinions expressed by DZone contributors are their own.

Related

  • CRUD REST API With Jakarta Core Profile Running on Java SE
  • Exploring Hazelcast With Spring Boot
  • How To Add Three Photo Filters to Your Applications in Java
  • How To Validate Names Using Java

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!