Package org.sqlproc.engine.jdbc
Class JdbcQuery
- java.lang.Object
-
- org.sqlproc.engine.jdbc.JdbcQuery
-
- All Implemented Interfaces:
SqlQuery
public class JdbcQuery extends Object implements SqlQuery
The JDBC stack implementation of the SQL Engine query contract. In fact it's an adapter the internal JDBC stuff.For more info please see the Tutorials.
- Author:
- Vladimir Hudec
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.sqlproc.engine.SqlQuery
SqlQuery.SqlQueryRowProcessor
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static Pattern
CALL
(package private) Connection
connection
The connection to the database.(package private) Integer
fetchSize
- * The fetch size of rows to retrieve in one SQL.(package private) Integer
firstResult
The first row to retrieve.(package private) List<String>
identities
The collection of all (auto-generated) identities.(package private) Map<String,IdentitySetter>
identitySetters
The collection of all identities setters.(package private) Map<String,Object>
identityTypes
The collection of all identities types.(package private) boolean
logError
The failed SQL command should be logged.(package private) org.slf4j.Logger
logger
The internal slf4j logger.(package private) Integer
maxResults
- * The maximum number of rows to retrieve.private static Map<String,Object>
NO_MORE_DATA
The indicator there are no more data in ResultSet.(package private) boolean
ordered
The SQL output is sorted.(package private) Map<String,OutValueSetter>
parameterOutValueSetters
The collection of all parameters output value setters.(package private) Map<Integer,Integer>
parameterOutValuesToPickup
The collection of all parameters, which have to be picked-up.(package private) Map<String,Object>
parameterOutValueTypes
The collection of all parameters types for output values.(package private) List<String>
parameters
The collection of all parameters (input value declarations).(package private) Map<String,Object>
parameterTypes
The collection of all parameters types.(package private) Map<String,Object>
parameterValues
The collection of all parameters values.(package private) String
queryString
The SQL query/statement command.(package private) List<String>
scalars
The collection of all scalars (output values declarations).(package private) Map<String,Object>
scalarTypes
The collection of all scalars types.(package private) SqlControl
sqlControl
The compound parameters controlling the META SQL execution.(package private) Integer
timeout
A timeout for the underlying query.
-
Constructor Summary
Constructors Constructor Description JdbcQuery(Connection connection, String queryString)
Creates a new instance of this adapter.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description SqlQuery
addScalar(String columnAlias)
Declares a scalar query result, which is an SQL query execution output value.SqlQuery
addScalar(String columnAlias, Object type, Class<?>... moreTypes)
Declares a scalar query result, which is an SQL query execution output value.Map<String,Object>
callFunction()
Executes the statements in the stored function, which return value of any type but the result set.List<Map<String,Object>>
callList(SqlRuntimeContext runtimeCtx)
Returns the stored procedure execution results as a List.Map<String,Object>
callUnique(SqlRuntimeContext runtimeCtx)
Convenience method to return a single instance that matches the stored procedure execution, or null if the stored procedure execution returns no results.int
callUpdate(SqlRuntimeContext runtimeCtx)
Executes the update, delete, insert statement or other statements in the stored procedure, which don't return the result set.protected void
doIdentitySelect(String identityName)
Runs the select to obtain the value of auto-generated identity.int[]
executeBatch(String[] statements)
Submits a batch of commands to the database for execution and if all commands execute successfully, returns an array of update counts.protected void
getGeneratedKeys(String identityName, Statement statement)
Retrieves the value of auto-generated identity from executed prepared statement.protected Map<String,Object>
getOneResult(ResultSet rs)
Gets the value of the designated columns for one database row as the object in the Java programming language.protected Map<String,Object>
getParameters(CallableStatement cs, boolean isFunction)
Gets the value of the designated OUT parameters.Object
getQuery()
Returns the internal representation of this query.protected List<Map<String,Object>>
getResults(ResultSet rs)
Gets the value of the designated columns as the objects in the Java programming language.private boolean
isSetJDBCIdentity()
List<Map<String,Object>>
list(SqlRuntimeContext runtimeCtx)
Returns the query results as a List.protected SqlProcessorException
newSqlProcessorException(SQLException ex, String query)
int
query(SqlRuntimeContext runtimeCtx, SqlQuery.SqlQueryRowProcessor sqlQueryRowProcessor)
Process the query output using theSqlQuery.SqlQueryRowProcessor
.protected int
setLimits(PreparedStatement ps, SqlFromToPlugin.LimitType limitType, int ix, boolean afterSql)
Sets the limit related parameters.void
setLogError(boolean logError)
Sets an indicator the failed SQL command should be loggedSqlQuery
setOrdered(boolean ordered)
Sets the indicator the SQL output is sorted.SqlQuery
setParameter(String name, Object val)
Binds a value to a named query parameter.SqlQuery
setParameter(String name, Object val, Object type, Class<?>... moreTypes)
Binds a value to a named query parameter.SqlQuery
setParameterList(String name, Object[] vals)
Binds multiple values to a named query parameter.SqlQuery
setParameterList(String name, Object[] vals, Object type, Class<?>... moreTypes)
Binds multiple values to a named query parameter.protected void
setParameters(PreparedStatement ps, SqlFromToPlugin.LimitType limitType, int start)
Sets the value of the designated parameters.SqlQuery
setSqlControl(SqlControl sqlControl)
Sets the compound parameters controlling the META SQL execution.Map<String,Object>
unique(SqlRuntimeContext runtimeCtx)
Convenience method to return a single instance that matches the query, or null if the query returns no results.int
update(SqlRuntimeContext runtimeCtx)
Executes the update, delete or insert statement.
-
-
-
Field Detail
-
logger
final org.slf4j.Logger logger
The internal slf4j logger.
-
connection
Connection connection
The connection to the database. It should be opened.
-
queryString
String queryString
The SQL query/statement command.
-
parameterOutValueTypes
Map<String,Object> parameterOutValueTypes
The collection of all parameters types for output values.
-
parameterOutValueSetters
Map<String,OutValueSetter> parameterOutValueSetters
The collection of all parameters output value setters.
-
parameterOutValuesToPickup
Map<Integer,Integer> parameterOutValuesToPickup
The collection of all parameters, which have to be picked-up.
-
identitySetters
Map<String,IdentitySetter> identitySetters
The collection of all identities setters.
-
sqlControl
SqlControl sqlControl
The compound parameters controlling the META SQL execution.
-
timeout
Integer timeout
A timeout for the underlying query.
-
firstResult
Integer firstResult
The first row to retrieve. -
-
maxResults
Integer maxResults
- * The maximum number of rows to retrieve. -
-
fetchSize
Integer fetchSize
- * The fetch size of rows to retrieve in one SQL. -
-
ordered
boolean ordered
The SQL output is sorted.
-
logError
boolean logError
The failed SQL command should be logged.
-
NO_MORE_DATA
private static final Map<String,Object> NO_MORE_DATA
The indicator there are no more data in ResultSet.
-
CALL
static final Pattern CALL
-
-
Constructor Detail
-
JdbcQuery
public JdbcQuery(Connection connection, String queryString)
Creates a new instance of this adapter.- Parameters:
connection
- the connection to the databasequeryString
- the SQL query/statement command
-
-
Method Detail
-
getQuery
public Object getQuery()
Returns the internal representation of this query. This implementation depends on the stack on top of which the SQL Processor works. It can be for example the Hibernate SQLQuery instance.
-
setSqlControl
public SqlQuery setSqlControl(SqlControl sqlControl)
Sets the compound parameters controlling the META SQL execution.- Specified by:
setSqlControl
in interfaceSqlQuery
- Parameters:
sqlControl
- the compound parameters controlling the META SQL execution- Returns:
- this instance to enable the methods chaining
-
setOrdered
public SqlQuery setOrdered(boolean ordered)
Sets the indicator the SQL output is sorted.- Specified by:
setOrdered
in interfaceSqlQuery
- Parameters:
ordered
- the indicator the SQL output is sorted- Returns:
- this instance to enable the methods chaining
-
list
public List<Map<String,Object>> list(SqlRuntimeContext runtimeCtx) throws SqlProcessorException
Returns the query results as a List. If the query contains multiple results per row, the results are returned in an instance of Object[].- Specified by:
list
in interfaceSqlQuery
- Parameters:
runtimeCtx
- the public runtime context- Returns:
- the result list
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
unique
public Map<String,Object> unique(SqlRuntimeContext runtimeCtx) throws SqlProcessorException
Convenience method to return a single instance that matches the query, or null if the query returns no results.- Specified by:
unique
in interfaceSqlQuery
- Parameters:
runtimeCtx
- the public runtime context- Returns:
- the single result or null
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
query
public int query(SqlRuntimeContext runtimeCtx, SqlQuery.SqlQueryRowProcessor sqlQueryRowProcessor) throws SqlProcessorException
Process the query output using theSqlQuery.SqlQueryRowProcessor
.- Specified by:
query
in interfaceSqlQuery
- Parameters:
runtimeCtx
- the public runtime contextsqlQueryRowProcessor
- the callback designated to process every database row- Returns:
- the total number of processed database rows
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
update
public int update(SqlRuntimeContext runtimeCtx) throws SqlProcessorException
Executes the update, delete or insert statement.- Specified by:
update
in interfaceSqlQuery
- Parameters:
runtimeCtx
- the public runtime context- Returns:
- the number of affected rows
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
isSetJDBCIdentity
private boolean isSetJDBCIdentity()
-
getGeneratedKeys
protected void getGeneratedKeys(String identityName, Statement statement)
Retrieves the value of auto-generated identity from executed prepared statement.- Parameters:
identityName
- the identity name from the META SQL statementstatement
- statement to retrieve auto-generated keys from
-
doIdentitySelect
protected void doIdentitySelect(String identityName)
Runs the select to obtain the value of auto-generated identity.- Parameters:
identityName
- the identity name from the META SQL statement
-
callList
public List<Map<String,Object>> callList(SqlRuntimeContext runtimeCtx) throws SqlProcessorException
Returns the stored procedure execution results as a List. If the query contains multiple results per row, the results are returned in an instance of Object[]. It's based on the CallableStatement invocation.- Specified by:
callList
in interfaceSqlQuery
- Parameters:
runtimeCtx
- the public runtime context- Returns:
- the result list
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
callUnique
public Map<String,Object> callUnique(SqlRuntimeContext runtimeCtx) throws SqlProcessorException
Convenience method to return a single instance that matches the stored procedure execution, or null if the stored procedure execution returns no results. It's based on the CallableStatement invocation.- Specified by:
callUnique
in interfaceSqlQuery
- Parameters:
runtimeCtx
- the public runtime context- Returns:
- the single result or null
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
callUpdate
public int callUpdate(SqlRuntimeContext runtimeCtx) throws SqlProcessorException
Executes the update, delete, insert statement or other statements in the stored procedure, which don't return the result set. It's based on the CallableStatement invocation.- Specified by:
callUpdate
in interfaceSqlQuery
- Parameters:
runtimeCtx
- the public runtime context- Returns:
- the number of affected rows
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
callFunction
public Map<String,Object> callFunction() throws SqlProcessorException
Executes the statements in the stored function, which return value of any type but the result set. It's based on the CallableStatement invocation.- Specified by:
callFunction
in interfaceSqlQuery
- Returns:
- the result of the stored function invocation
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
addScalar
public SqlQuery addScalar(String columnAlias)
Declares a scalar query result, which is an SQL query execution output value.
-
addScalar
public SqlQuery addScalar(String columnAlias, Object type, Class<?>... moreTypes)
Declares a scalar query result, which is an SQL query execution output value.
-
setParameter
public SqlQuery setParameter(String name, Object val) throws SqlProcessorException
Binds a value to a named query parameter.- Specified by:
setParameter
in interfaceSqlQuery
- Parameters:
name
- the name of the parameterval
- the not-null parameter value- Returns:
- this instance to enable the methods chaining
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
setParameter
public SqlQuery setParameter(String name, Object val, Object type, Class<?>... moreTypes) throws SqlProcessorException
Binds a value to a named query parameter.- Specified by:
setParameter
in interfaceSqlQuery
- Parameters:
name
- the name of the parameterval
- the possibly-null parameter valuetype
- the (META) type of the parameter- Returns:
- this instance to enable the methods chaining
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
setParameterList
public SqlQuery setParameterList(String name, Object[] vals) throws SqlProcessorException
Binds multiple values to a named query parameter. This is useful for binding a list of values to the query fragment in (:value_list).- Specified by:
setParameterList
in interfaceSqlQuery
- Parameters:
name
- the name of the parametervals
- a collection of values- Returns:
- this instance to enable the methods chaining
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
setParameterList
public SqlQuery setParameterList(String name, Object[] vals, Object type, Class<?>... moreTypes) throws SqlProcessorException
Binds multiple values to a named query parameter. This is useful for binding a list of values to the query fragment in (:value_list).- Specified by:
setParameterList
in interfaceSqlQuery
- Parameters:
name
- the name of the parametervals
- a collection of valuestype
- the (META) type of the parameter- Returns:
- this instance to enable the methods chaining
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
setParameters
protected void setParameters(PreparedStatement ps, SqlFromToPlugin.LimitType limitType, int start) throws SQLException, SqlProcessorException
Sets the value of the designated parameters.- Parameters:
ps
- an instance of PreparedStatementlimitType
- the limit type to restrict the number of rows in the result setstart
- the index of the first parameter to bind to prepared statement- Throws:
SQLException
- if a database access error occurs or this method is called on a closedPreparedStatement
SqlProcessorException
-
setLimits
protected int setLimits(PreparedStatement ps, SqlFromToPlugin.LimitType limitType, int ix, boolean afterSql) throws SQLException
Sets the limit related parameters.- Parameters:
ps
- an instance of PreparedStatementlimitType
- the limit type to restrict the number of rows in the result setix
- a column indexafterSql
- an indicator it's done after the main SQL statement execution- Returns:
- the updated column index
- Throws:
SQLException
- if a database access error occurs or this method is called on a closedPreparedStatement
-
getParameters
protected Map<String,Object> getParameters(CallableStatement cs, boolean isFunction) throws SQLException
Gets the value of the designated OUT parameters.- Parameters:
cs
- an instance of CallableStatement- Throws:
SQLException
- if a database access error occurs or this method is called on a closedCallableStatement
-
getResults
protected List<Map<String,Object>> getResults(ResultSet rs) throws SQLException
Gets the value of the designated columns as the objects in the Java programming language.- Parameters:
rs
- an instance of ResultSet- Returns:
- the result list
- Throws:
SQLException
- if a database access error occurs or this method is called on a closedResultSet
-
getOneResult
protected Map<String,Object> getOneResult(ResultSet rs) throws SQLException
Gets the value of the designated columns for one database row as the object in the Java programming language.- Parameters:
rs
- an instance of ResultSet- Returns:
- the result object for one row
- Throws:
SQLException
- if a database access error occurs or this method is called on a closedResultSet
-
executeBatch
public int[] executeBatch(String[] statements) throws SqlProcessorException
Submits a batch of commands to the database for execution and if all commands execute successfully, returns an array of update counts.- Specified by:
executeBatch
in interfaceSqlQuery
- Parameters:
statements
- SQL statements to be executed in batch- Returns:
- an array of update counts containing one element for each command in the batch
- Throws:
SqlProcessorException
- in the case of any problem in ORM or JDBC stack
-
newSqlProcessorException
protected SqlProcessorException newSqlProcessorException(SQLException ex, String query)
-
setLogError
public void setLogError(boolean logError)
Sets an indicator the failed SQL command should be logged- Specified by:
setLogError
in interfaceSqlQuery
- Parameters:
logError
- an indicator the failed SQL command should be logged
-
-