[[sqlcontainer]]
== Vaadin SQLContainer

Vaadin SQLContainer is a container implementation that allows easy and
customizable access to data stored in various SQL-speaking databases.

SQLContainer supports two types of database access. Using
[classname]#TableQuery#, the pre-made query generators will enable fetching,
updating, and inserting data directly from the container into a database table -
automatically, whereas [classname]#FreeformQuery# allows the developer to use
their own, probably more complex query for fetching data and their own optional
implementations for writing, filtering and sorting support - item and property
handling as well as lazy loading will still be handled automatically.

In addition to the customizable database connection options, SQLContainer also
extends the Vaadin [classname]#Container# interface to implement more advanced
and more database-oriented filtering rules. Finally, the add-on also offers
connection pool implementations for JDBC connection pooling and JEE connection
pooling, as well as integrated transaction support; auto-commit mode is also
provided.

The purpose of this section is to briefly explain the architecture and some of
the inner workings of SQLContainer. It will also give the readers some examples
on how to use SQLContainer in their own applications. The requirements,
limitations and further development ideas are also discussed.

SQLContainer is available from the Vaadin Directory under the same unrestrictive
Apache License 2.0 as the Vaadin Framework itself.


include::sqlcontainer-architecture.asciidoc[leveloffset=+2]

include::sqlcontainer-getting-started.asciidoc[leveloffset=+2]

include::sqlcontainer-filteringsorting.asciidoc[leveloffset=+2]

include::sqlcontainer-editing.asciidoc[leveloffset=+2]

include::sqlcontainer-caching.asciidoc[leveloffset=+2]

include::sqlcontainer-referencing.asciidoc[leveloffset=+2]

include::sqlcontainer-freeform.asciidoc[leveloffset=+2]

include::sqlcontainer-nonimplemented.asciidoc[leveloffset=+2]

include::sqlcontainer-limitations.asciidoc[leveloffset=+2]
