What is rdbc?¶
rdbc is a SQL-level relational database access API targeting Scala and Java programming languages. The API is fully asynchronous and provides a possibility to leverage Reactive Streams' stream processing capabilities.
Following list outlines the goals of the API:
Provide vendor neutral access to most commonly used database features.
The API is meant to be vendor neutral in a sense that if clients stick to using only standard SQL features no vendor-specific code should be needed and database backends can be switched with no client code changes.
Be asynchronous and reactive.
All methods that can potentially perform I/O actions don't block the executing thread so the API fits well into a non-blocking application design. rdbc allows building applications according to the Reactive Manifesto by using Reactive Streams for asynchronous results streaming with a back-pressure.
Provide a foundation for higher-level APIs.
rdbc is a rather low-level API enabling clients to use plain SQL queries and get results back. While it can be used directly it's also meant to provide a foundation for higher-level APIs like functional or object relational mapping libraries.
Following list outlines the areas that the API is not meant to cover.
Will not provide a full type-safety.
rdbc works on a SQL level, meaning that requests made to the database are strings. There is no additional layer that would ensure type-safety when working with SQL. The API is also meant to be dynamic and allow type converters to be registered at runtime. This approach sacrifices some type-safety but at the same time makes it possible to implement wider range of higher-level APIs on top of rdbc.
Both Scala and Java APIs are now complete. More feedback from the community is needed before releasing the first 1.0.0 milestone.
Join rdbc-io/rdbc gitter channel for questions and any kind of discussion about rdbc. You are also free to ask your question by creating a Github issue.
See also rdbc tag on StackOverflow.
rdbc is an open source software licensed under Apache License 2.0.