public class JdbcTestUtils extends Object
JdbcTestUtils
is a collection of JDBC related utility functions
intended to simplify standard database testing scenarios.
As of Spring 3.1.3, JdbcTestUtils
supersedes SimpleJdbcTestUtils
.
Constructor and Description |
---|
JdbcTestUtils() |
Modifier and Type | Method and Description |
---|---|
static boolean |
containsSqlScriptDelimiters(String script,
char delim)
Determine if the provided SQL script contains the specified delimiter.
|
static int |
countRowsInTable(JdbcTemplate jdbcTemplate,
String tableName)
Count the rows in the given table.
|
static int |
countRowsInTableWhere(JdbcTemplate jdbcTemplate,
String tableName,
String whereClause)
Count the rows in the given table, using the provided
WHERE clause. |
static int |
deleteFromTables(JdbcTemplate jdbcTemplate,
String... tableNames)
Delete all rows from the specified tables.
|
static int |
deleteFromTableWhere(JdbcTemplate jdbcTemplate,
String tableName,
String whereClause,
Object... args)
Delete rows from the given table, using the provided
WHERE clause. |
static void |
dropTables(JdbcTemplate jdbcTemplate,
String... tableNames)
Drop the specified tables.
|
static void |
executeSqlScript(JdbcTemplate jdbcTemplate,
EncodedResource resource,
boolean continueOnError)
Execute the given SQL script.
|
static void |
executeSqlScript(JdbcTemplate jdbcTemplate,
Resource resource,
boolean continueOnError)
Execute the given SQL script.
|
static void |
executeSqlScript(JdbcTemplate jdbcTemplate,
ResourceLoader resourceLoader,
String sqlResourcePath,
boolean continueOnError)
Execute the given SQL script.
|
static String |
readScript(LineNumberReader lineNumberReader)
Read a script from the provided
LineNumberReader , using
"-- " as the comment prefix, and build a String containing
the lines. |
static String |
readScript(LineNumberReader lineNumberReader,
String commentPrefix)
Read a script from the provided
LineNumberReader , using the supplied
comment prefix, and build a String containing the lines. |
static void |
splitSqlScript(String script,
char delim,
List<String> statements)
Split an SQL script into separate statements delimited by the provided
delimiter character.
|
public static int countRowsInTable(JdbcTemplate jdbcTemplate, String tableName)
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationstableName
- name of the table to count rows inpublic static int countRowsInTableWhere(JdbcTemplate jdbcTemplate, String tableName, String whereClause)
WHERE
clause.
If the provided WHERE
clause contains text, it will be prefixed
with " WHERE "
and then appended to the generated SELECT
statement. For example, if the provided table name is "person"
and
the provided where clause is "name = 'Bob' and age > 25"
, the
resulting SQL statement to execute will be
"SELECT COUNT(0) FROM person WHERE name = 'Bob' and age > 25"
.
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationstableName
- the name of the table to count rows inwhereClause
- the WHERE
clause to append to the queryWHERE
clausepublic static int deleteFromTables(JdbcTemplate jdbcTemplate, String... tableNames)
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationstableNames
- the names of the tables to delete frompublic static int deleteFromTableWhere(JdbcTemplate jdbcTemplate, String tableName, String whereClause, Object... args)
WHERE
clause.
If the provided WHERE
clause contains text, it will be prefixed
with " WHERE "
and then appended to the generated DELETE
statement. For example, if the provided table name is "person"
and
the provided where clause is "name = 'Bob' and age > 25"
, the
resulting SQL statement to execute will be
"DELETE FROM person WHERE name = 'Bob' and age > 25"
.
As an alternative to hard-coded values, the "?"
placeholder can
be used within the WHERE
clause, binding to the given arguments.
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationstableName
- the name of the table to delete rows fromwhereClause
- the WHERE
clause to append to the queryargs
- arguments to bind to the query (leaving it to the PreparedStatement
to guess the corresponding SQL type); may also contain SqlParameterValue
objects which indicate not only the argument value but also the SQL type and
optionally the scale.public static void dropTables(JdbcTemplate jdbcTemplate, String... tableNames)
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationstableNames
- the names of the tables to droppublic static void executeSqlScript(JdbcTemplate jdbcTemplate, ResourceLoader resourceLoader, String sqlResourcePath, boolean continueOnError) throws DataAccessException
The script will typically be loaded from the classpath. There should be one statement per line. Any semicolons and line comments will be removed.
Do not use this method to execute DDL if you expect rollback.
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationsresourceLoader
- the resource loader with which to load the SQL scriptsqlResourcePath
- the Spring resource path for the SQL scriptcontinueOnError
- whether or not to continue without throwing an
exception in the event of an errorDataAccessException
- if there is an error executing a statement
and continueOnError
is false
ResourceDatabasePopulator
,
executeSqlScript(JdbcTemplate, Resource, boolean)
public static void executeSqlScript(JdbcTemplate jdbcTemplate, Resource resource, boolean continueOnError) throws DataAccessException
The script will typically be loaded from the classpath. Statements should be delimited with a semicolon. If statements are not delimited with a semicolon then there should be one statement per line. Statements are allowed to span lines only if they are delimited with a semicolon. Any line comments will be removed.
Do not use this method to execute DDL if you expect rollback.
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationsresource
- the resource to load the SQL script fromcontinueOnError
- whether or not to continue without throwing an
exception in the event of an errorDataAccessException
- if there is an error executing a statement
and continueOnError
is false
ResourceDatabasePopulator
,
executeSqlScript(JdbcTemplate, EncodedResource, boolean)
public static void executeSqlScript(JdbcTemplate jdbcTemplate, EncodedResource resource, boolean continueOnError) throws DataAccessException
The script will typically be loaded from the classpath. There should be one statement per line. Any semicolons and line comments will be removed.
Do not use this method to execute DDL if you expect rollback.
jdbcTemplate
- the JdbcTemplate with which to perform JDBC operationsresource
- the resource (potentially associated with a specific encoding)
to load the SQL script fromcontinueOnError
- whether or not to continue without throwing an
exception in the event of an errorDataAccessException
- if there is an error executing a statement
and continueOnError
is false
ResourceDatabasePopulator
public static String readScript(LineNumberReader lineNumberReader) throws IOException
LineNumberReader
, using
"--
" as the comment prefix, and build a String
containing
the lines.lineNumberReader
- the LineNumberReader
containing the script
to be processedString
containing the script linesIOException
readScript(LineNumberReader, String)
public static String readScript(LineNumberReader lineNumberReader, String commentPrefix) throws IOException
LineNumberReader
, using the supplied
comment prefix, and build a String
containing the lines.
Lines beginning with the comment prefix are excluded from the results; however, line comments anywhere else — for example, within a statement — will be included in the results.
lineNumberReader
- the LineNumberReader
containing the script
to be processedcommentPrefix
- the prefix that identifies comments in the SQL script — typically "--"String
containing the script linesIOException
public static boolean containsSqlScriptDelimiters(String script, char delim)
script
- the SQL scriptdelim
- character delimiting each statement — typically a ';' charactertrue
if the script contains the delimiter; false
otherwisepublic static void splitSqlScript(String script, char delim, List<String> statements)
List
.
Within a statement, "--
" will be used as the comment prefix;
any text beginning with the comment prefix and extending to the end of
the line will be omitted from the statement. In addition, multiple adjacent
whitespace characters will be collapsed into a single space.
script
- the SQL scriptdelim
- character delimiting each statement — typically a ';' characterstatements
- the list that will contain the individual statements