public final class JdbcSession extends Object
Execute a simple SQL query over a JDBC data source:
String name = new JdbcSession(source) .sql("SELECT name FROM foo WHERE id = ?") .set(123) .select( new JdbcSession.Handler<String>() { @Override public String handle(final ResultSet rset) throws SQLException { rset.next(); return rset.getString(1); } } );
There are a number of convenient pre-defined handlers, like
VoidHandler
, NotEmptyHandler
, SingleHandler
, etc.
Methods insert(Handler)
, update()
, and
select(Handler)
clean the list of arguments pre-set by
set(Object)
. The class can be used for a complex transaction, when
it's necessary to perform a number of SQL statements in a group. For
example, the following construct will execute two SQL queries, in a single
transaction and will "commit" at the end (or rollback the entire transaction
in case of any error in between):
new JdbcSession(source) .autocommit(false) .sql("START TRANSACTION") .update() .sql("DELETE FROM foo WHERE id = ?") .set(444) .update() .set(555) .update() .commit();
The following SQL queries will be sent to the database:
START TRANSACTION; DELETE FROM foo WHERE id = 444; DELETE FROM foo WHERE id = 555; COMMIT;
autocommit(boolean)
(with false
as an argument)
can be used when it's necessary to execute
a statement and leave the connection open. For example when shutting down
the database through SQL:
new JdbcSession(/* H2 Database data source */) .autocommit(false) .sql("SHUTDOWN COMPACT") .update();
This class is thread-safe.
Modifier and Type | Class and Description |
---|---|
static interface |
JdbcSession.Handler<T>
Handler or ResultSet.
|
Constructor and Description |
---|
JdbcSession(DataSource source)
Public ctor.
|
Modifier and Type | Method and Description |
---|---|
JdbcSession |
autocommit(boolean autocommit)
Shall we auto-commit?
|
void |
commit()
Commit the transation (calls
Connection.commit() and then
Connection.close() ). |
<T> T |
insert(JdbcSession.Handler<T> handler)
Make SQL
INSERT request. |
<T> T |
select(JdbcSession.Handler<T> handler)
Make SQL
SELECT request. |
JdbcSession |
set(Object value)
Set new param for the query.
|
JdbcSession |
sql(String sql)
Use this SQL query (with optional parameters inside).
|
JdbcSession |
update()
Make SQL
UPDATE request. |
public JdbcSession(DataSource source)
source
- Data sourcepublic JdbcSession sql(String sql)
The query will be used in PreparedStatement
, that's why
you can use the same formatting as there. Arguments shall be marked
as "?"
(question marks). For example:
String name = new JdbcSession(source) .sql("INSERT INTO foo (id, name) VALUES (?, ?)") .set(556677) .set("Jeffrey Lebowski") .insert(new VoidHandler());
sql
- The SQL query to usepublic JdbcSession autocommit(boolean autocommit)
By default this flag is set to TRUE, which means that methods
insert(Handler)
, update()
, and
select(Handler)
will call Connection.commit()
after
their successful execution.
autocommit
- Shall we?public JdbcSession set(Object value)
The following types are supported: Boolean
, Date
,
Utc
, Long
, Integer
. All other types will be
converted to String
using their toString()
methods.
value
- The value to addpublic void commit()
Connection.commit()
and then
Connection.close()
).public <T> T insert(JdbcSession.Handler<T> handler)
INSERT
request.
JdbcSession.Handler
will receive a ResultSet
of generated keys.
T
- Type of responsehandler
- The handler or resultpublic JdbcSession update()
UPDATE
request.public <T> T select(JdbcSession.Handler<T> handler)
SELECT
request.T
- Type of responsehandler
- The handler or resultCopyright © 2012 jcabi.com. All Rights Reserved.