Java SDK (Coming Soon)

Java SDK Quick Start — WoWSQL Docs

Java Quick Start

WoWSQL Java SDK — Get started in minutes

Get your API key: Use the WoWSQL project dashboard to create or copy your API key. The same key works for database, auth, and storage (unified API key).

Installation

Official package: View on Maven Central →

Maven:

<dependency>
  <groupId>com.wowsql</groupId>
  <artifactId>wowsql-sdk</artifactId>
  <version>1.0.0</version>
</dependency>

Gradle:

implementation 'com.wowsql:wowsql-sdk:1.0.0'

Initialize Client

import com.wowsql.WowSQLClient;
import com.wowsql.models.QueryResponse;
import java.util.*;

// Initialize client with your API key (same key for database, auth, storage)
WowSQLClient client = new WowSQLClient(
    "https://myproject.wowsql.com",
    "your_api_key_here"
);

// Always use select() before get()/execute()
QueryResponse<?> users = client.table("users").select("*").limit(10).get();

Query Data

Basic Queries

// Get all records
QueryResponse<?> users = client.table("users").select("*").get();

// With filters
QueryResponse<?> adults = client.table("users")
    .select("*")
    .filter("age", "gte", 18)
    .get();

// Select specific columns
QueryResponse<?> names = client.table("users").select("id", "name").get();

Advanced Queries

// Multiple filters with sorting
QueryResponse<?> activeUsers = client.table("users")
    .select("*")
    .filter("status", "eq", "active")
    .filter("age", "gt", 18)
    .order("created_at", "desc")
    .limit(20)
    .offset(0)
    .get();

System.out.println("Found " + activeUsers.getCount() + " users");
for (Object user : activeUsers.getData()) {
    System.out.println(((Map<String, Object>) user).get("name"));
}

Filter Helper Methods

// Using helper methods: eq, gt, gte, lt, lte, like, in, between
QueryResponse<?> users = client.table("users")
    .eq("status", "active")
    .gt("age", 18)
    .like("email", "%@gmail.com")
    .in("role", Arrays.asList("admin", "moderator"))
    .between("created_at", "2024-01-01", "2024-12-31")
    .get();

GROUP BY and Aggregates

Basic GROUP BY

// Group by category with counts
QueryResponse<?> result = client.table("products")
    .select("category", "COUNT(*) as count", "AVG(price) as avg_price")
    .groupBy("category")
    .get();

// Group by date
QueryResponse<?> result2 = client.table("orders")
    .select("DATE(created_at) as date", "COUNT(*) as orders", "SUM(total) as revenue")
    .groupBy("DATE(created_at)")
    .orderBy("date", "desc")
    .get();

HAVING Clause

QueryResponse<?> result = client.table("products")
    .select("category", "COUNT(*) as count")
    .groupBy("category")
    .having("COUNT(*)", "gt", 10)
    .get();

CRUD Operations

Create Record

Map<String, Object> row = new HashMap<>();
row.put("name", "John Doe");
row.put("email", "john@example.com");
row.put("age", 30);
Map<String, Object> result = client.table("users").create(row);
System.out.println("Created user with ID: " + result.get("id"));

Update Record

client.table("users").update(123, Map.of("email", "newemail@example.com"));
System.out.println("User updated successfully");

Delete Record

client.table("users").delete(123);
System.out.println("User deleted successfully");

Get Single Record by ID

Map<String, Object> user = client.table("users").getById(123);
System.out.println("User: " + user.get("name"));

Get First Record

Map<String, Object> first = client.table("users")
    .filter("status", "eq", "active")
    .first();
if (first != null) {
    System.out.println("First active user: " + first.get("name"));
}

Filter Operators

Available operators for filtering data:

OperatorDescriptionExample (Java)
eqEquals.filter("status", "eq", "active")
neqNot equals.filter("status", "neq", "deleted")
gtGreater than.filter("age", "gt", 18)
gteGreater than or equal.filter("age", "gte", 18)
ltLess than.filter("price", "lt", 100)
lteLess than or equal.filter("price", "lte", 100)
likePattern matching.filter("name", "like", "john")
inIN operator.in("category", Arrays.asList("electronics", "books"))
not_inNOT IN.notIn("status", Arrays.asList("deleted", "archived"))
betweenBETWEEN.between("price", 10, 100)

Error Handling

try {
    QueryResponse<?> users = client.table("users").select("*").get();
    System.out.println("Success: " + users.getData().size() + " users");
} catch (WowSQLException e) {
    if (e.getStatusCode() == 401) System.out.println("Authentication failed — check your API key");
    else if (e.getStatusCode() == 404) System.out.println("Table or resource not found");
    else System.out.println("Error (" + e.getStatusCode() + "): " + e.getMessage());
}

Authentication

Use the same API key for authentication. One key works for database and auth.

Sign Up & Sign In

import com.wowsql.ProjectAuthClient;
import com.wowsql.models.AuthResponse;

ProjectAuthClient auth = new ProjectAuthClient(
    "https://myproject.wowsql.com",
    "your_api_key"
);

// Sign up
AuthResponse result = auth.signUp("user@example.com", "SecurePassword123", "John Doe", null);
System.out.println("Access token: " + result.getSession().getAccessToken());

// Sign in
AuthResponse login = auth.signIn("user@example.com", "SecurePassword123");
System.out.println("User ID: " + login.getUser().getId());

Password Reset

auth.forgotPassword("user@example.com");
auth.resetPassword("reset_token_from_email", "NewSecurePassword123");

Storage Operations

Initialize Storage

WowSQLStorage storage = new WowSQLStorage(
    "https://myproject.wowsql.com",
    "your_api_key"
);

File Operations

// Upload file
storage.uploadFromPath("path/to/document.pdf", "uploads/document.pdf", "documents");

// Get file URL
Map<String, Object> urlData = storage.getFileUrl("uploads/document.pdf", 3600);
System.out.println("Download URL: " + urlData.get("file_url"));

// List files
List<StorageFile> files = storage.listFiles("uploads/");
for (StorageFile file : files) {
    System.out.println(file.getKey() + ": " + file.getSizeMb() + " MB");
}

// Delete file
storage.deleteFile("uploads/document.pdf");

// Check quota
StorageQuota quota = storage.getQuota();
System.out.println("Used: " + quota.getUsedGb() + " GB / " + quota.getQuotaGb() + " GB");

Download or View File

Via REST: use GET .../files/{file_key}/download for attachment download, or GET .../files/{file_key}/view to view inline in the browser.