/** * Check mandatory properties - there must be a SimpleJdbcTemplate and an SQL statement plus a * parameter source. */ @Override public void afterPropertiesSet() { Assert.notNull(namedParameterJdbcTemplate, "A DataSource or a NamedParameterJdbcTemplate is required."); Assert.notNull(sql, "An SQL statement is required."); List<String> namedParameters = new ArrayList<>(); parameterCount = JdbcParameterUtils.countParameterPlaceholders(sql, namedParameters); if (namedParameters.size() > 0) { if (parameterCount != namedParameters.size()) { throw new InvalidDataAccessApiUsageException("You can't use both named parameters and classic \"?\" placeholders: " + sql); } usingNamedParameters = true; } if (!usingNamedParameters) { Assert.notNull(itemPreparedStatementSetter, "Using SQL statement with '?' placeholders requires an ItemPreparedStatementSetter"); } }
int j = i + 1; StringBuilder parameter = new StringBuilder(); while (j < statement.length && parameterNameContinues(statement, j)) { parameter.append(statement[j]); j++;
/** * Check mandatory properties. * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ @Override public void init(DataSource dataSource) throws Exception { Assert.notNull(dataSource, "A DataSource is required"); Assert.hasLength(selectClause, "selectClause must be specified"); Assert.hasLength(fromClause, "fromClause must be specified"); Assert.notEmpty(sortKeys, "sortKey must be specified"); StringBuilder sql = new StringBuilder(); sql.append("SELECT ").append(selectClause); sql.append(" FROM ").append(fromClause); if (whereClause != null) { sql.append(" WHERE ").append(whereClause); } if(groupClause != null) { sql.append(" GROUP BY ").append(groupClause); } List<String> namedParameters = new ArrayList<>(); parameterCount = JdbcParameterUtils.countParameterPlaceholders(sql.toString(), namedParameters); if (namedParameters.size() > 0) { if (parameterCount != namedParameters.size()) { throw new InvalidDataAccessApiUsageException( "You can't use both named parameters and classic \"?\" placeholders: " + sql); } usingNamedParameters = true; } }
int j = i + 1; StringBuilder parameter = new StringBuilder(); while (j < statement.length && parameterNameContinues(statement, j)) { parameter.append(statement[j]); j++;
@Test public void testCountParameterPlaceholders() { assertEquals(0, JdbcParameterUtils.countParameterPlaceholders(null, null)); assertEquals(0, JdbcParameterUtils.countParameterPlaceholders("", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("?", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The \"big\" ? 'bad wolf'", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big ?? bad wolf", null)); assertEquals(3, JdbcParameterUtils.countParameterPlaceholders("The big ? ? bad ? wolf", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The \"big?\" 'ba''ad?' ? wolf", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders(":parameter", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The \"big\" :parameter 'bad wolf'", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The big :parameter :parameter bad wolf", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big :parameter :newpar :parameter bad wolf", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big :parameter, :newpar, :parameter bad wolf", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The \"big:\" 'ba''ad:p' :parameter wolf", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("¶meter", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The \"big\" ¶meter 'bad wolf'", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The big ¶meter ¶meter bad wolf", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big ¶meter &newparameter ¶meter bad wolf", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big ¶meter, &newparameter, ¶meter bad wolf", null)); assertEquals(1, JdbcParameterUtils.countParameterPlaceholders("The \"big &x \" 'ba''ad&p' ¶meter wolf", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big :parameter, &newparameter, ¶meter bad wolf", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big :parameter, &sameparameter, &sameparameter bad wolf", null)); assertEquals(2, JdbcParameterUtils.countParameterPlaceholders("The big :parameter, :sameparameter, :sameparameter bad wolf", null)); assertEquals(0, JdbcParameterUtils.countParameterPlaceholders("xxx & yyy", null)); List<String> l = new ArrayList<>(); assertEquals(3, JdbcParameterUtils.countParameterPlaceholders("select :par1, :par2 :par3", l)); assertEquals(3, l.size()); }
/** * Check mandatory properties - there must be a SimpleJdbcTemplate and an SQL statement plus a * parameter source. */ @Override public void afterPropertiesSet() { Assert.notNull(namedParameterJdbcTemplate, "A DataSource or a NamedParameterJdbcTemplate is required."); Assert.notNull(sql, "An SQL statement is required."); List<String> namedParameters = new ArrayList<>(); parameterCount = JdbcParameterUtils.countParameterPlaceholders(sql, namedParameters); if (namedParameters.size() > 0) { if (parameterCount != namedParameters.size()) { throw new InvalidDataAccessApiUsageException("You can't use both named parameters and classic \"?\" placeholders: " + sql); } usingNamedParameters = true; } if (!usingNamedParameters) { Assert.notNull(itemPreparedStatementSetter, "Using SQL statement with '?' placeholders requires an ItemPreparedStatementSetter"); } }
@Override public void init(DataSource dataSource) throws Exception { Assert.notNull(dataSource, "DataSource must not be null"); Assert.hasLength(selectClause, "selectClause must be specified"); Assert.hasLength(fromClause, "fromClause must be specified"); Assert.notEmpty(sortKeys, "sortKey must be specified"); StringBuilder sql = new StringBuilder(); sql.append("SELECT ").append(selectClause); sql.append(" FROM ").append(fromClause); if (whereClause != null) { sql.append(" WHERE ").append(whereClause); } List<String> namedParameters = new ArrayList<String>(); parameterCount = JdbcParameterUtils.countParameterPlaceholders(sql.toString(), namedParameters); if (namedParameters.size() > 0) { if (parameterCount != namedParameters.size()) { throw new InvalidDataAccessApiUsageException( "You can't use both named parameters and classic \"?\" placeholders: " + sql); } usingNamedParameters = true; } } private String removeKeyWord(String keyWord, String clause) {
@Override public void init(DataSource dataSource) throws Exception { Assert.notNull(dataSource, "DataSource must not be null"); Assert.hasLength(selectClause, "selectClause must be specified"); Assert.hasLength(fromClause, "fromClause must be specified"); Assert.notEmpty(sortKeys, "sortKey must be specified"); StringBuilder sql = new StringBuilder(); sql.append("SELECT ").append(selectClause); sql.append(" FROM ").append(fromClause); if (whereClause != null) { sql.append(" WHERE ").append(whereClause); } List<String> namedParameters = new ArrayList<String>(); parameterCount = JdbcParameterUtils.countParameterPlaceholders(sql.toString(), namedParameters); if (namedParameters.size() > 0) { if (parameterCount != namedParameters.size()) { throw new InvalidDataAccessApiUsageException( "You can't use both named parameters and classic \"?\" placeholders: " + sql); } usingNamedParameters = true; } } private String removeKeyWord(String keyWord, String clause) {
/** * Check mandatory properties. * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ @Override public void init(DataSource dataSource) throws Exception { Assert.notNull(dataSource, "A DataSource is required"); Assert.hasLength(selectClause, "selectClause must be specified"); Assert.hasLength(fromClause, "fromClause must be specified"); Assert.notEmpty(sortKeys, "sortKey must be specified"); StringBuilder sql = new StringBuilder(); sql.append("SELECT ").append(selectClause); sql.append(" FROM ").append(fromClause); if (whereClause != null) { sql.append(" WHERE ").append(whereClause); } if(groupClause != null) { sql.append(" GROUP BY ").append(groupClause); } List<String> namedParameters = new ArrayList<String>(); parameterCount = JdbcParameterUtils.countParameterPlaceholders(sql.toString(), namedParameters); if (namedParameters.size() > 0) { if (parameterCount != namedParameters.size()) { throw new InvalidDataAccessApiUsageException( "You can't use both named parameters and classic \"?\" placeholders: " + sql); } usingNamedParameters = true; } }