Pyranid Logo

Core Concepts

Statements

Statements are used for general-purpose DML execution (INSERT, UPDATE, DELETE, functions, ...) They can also be expressions that return nothing, such as DDL operations (CREATE TABLE, ALTER TABLE, ...)

Pyranid will automatically determine if your JDBC driver supports "large" updates and batch operations and uses them if available.


Statement Types

Basic

Most statements follow this pattern - execute them and see how many rows were affected.

// Returns the number of affected rows
long updateCount = database.execute("UPDATE car SET color=?", Color.RED);

References:

Returning

You may return single or multiple objects via the SQL RETURNING clause for DML statements (Postgres and Oracle). SQL Sever uses a special OUTPUT clause for this scenario.

// Returns a single object - here, the sequence value used for the insert
Optional<BigInteger> insertedCarId = database.executeForObject("""
  INSERT INTO car (id, color)
  VALUES (nextval('car_seq'), ?)
  RETURNING id
  """, BigInteger.class, Color.GREEN);

// Returns a list of objects - here, the rows that were updated
List<Car> repaintedCars = database.executeForList("""
  UPDATE car
  SET color=?
  WHERE color=?
  RETURNING *
  """, Car.class, Color.GREEN, Color.BLUE);

References:

Batch

Batch operations can be more efficient than execution of discrete statements - they are useful for inserting a lot of data at once.

// Batch parameters are lists of lists
List<List<Object>> parameterGroups = List.of(
  List.of(123, Color.BLUE),
  List.of(456, Color.RED)
);

// Insert both cars
List<Long> updateCounts = database.executeBatch(
  "INSERT INTO car VALUES (?,?)", parameterGroups);

References:

Previous
Queries