private String generateFinalNamePattern(DatabaseMetaData meta, String name) throws SQLException { if ( meta.storesLowerCaseIdentifiers() ) { return name.toLowerCase(Locale.ROOT); } else { return name; } } }
setStoresLowerCaseIdentifiers(databaseMetaData.storesLowerCaseIdentifiers());
@Override public void initializeWithMetaData(DatabaseMetaData databaseMetaData) throws SQLException { try { setSupportsCatalogsInProcedureCalls(databaseMetaData.supportsCatalogsInProcedureCalls()); } catch (SQLException ex) { logger.debug("Error retrieving 'DatabaseMetaData.supportsCatalogsInProcedureCalls' - " + ex.getMessage()); } try { setSupportsSchemasInProcedureCalls(databaseMetaData.supportsSchemasInProcedureCalls()); } catch (SQLException ex) { logger.debug("Error retrieving 'DatabaseMetaData.supportsSchemasInProcedureCalls' - " + ex.getMessage()); } try { setStoresUpperCaseIdentifiers(databaseMetaData.storesUpperCaseIdentifiers()); } catch (SQLException ex) { logger.debug("Error retrieving 'DatabaseMetaData.storesUpperCaseIdentifiers' - " + ex.getMessage()); } try { setStoresLowerCaseIdentifiers(databaseMetaData.storesLowerCaseIdentifiers()); } catch (SQLException ex) { logger.debug("Error retrieving 'DatabaseMetaData.storesLowerCaseIdentifiers' - " + ex.getMessage()); } }
setStoresLowerCaseIdentifiers(databaseMetaData.storesLowerCaseIdentifiers());
convertTableName = tableName.toUpperCase(); if (databaseMetaData.storesLowerCaseIdentifiers()) { metaData.setCatalog(catalogName.toLowerCase()); metaData.setSchemaPattern(schemaName.toLowerCase());
metaData.storesLowerCaseIdentifiers(), metaData.storesUpperCaseIdentifiers(), metaData.storesMixedCaseIdentifiers() this.unquotedCaseStrategy = IdentifierCaseStrategy.UPPER; else if ( metaData.storesLowerCaseIdentifiers() ) { this.unquotedCaseStrategy = IdentifierCaseStrategy.LOWER;
/** * 根据{@linkplain DatabaseMetaData}获取正确的表名 * * <pre> * metaData中的storesUpperCaseIdentifiers,storesUpperCaseQuotedIdentifiers,storesLowerCaseIdentifiers, * storesLowerCaseQuotedIdentifiers,storesMixedCaseIdentifiers,storesMixedCaseQuotedIdentifiers * </pre> */ private static String getIdentifierName(String name, DatabaseMetaData metaData) throws SQLException { if (metaData.storesMixedCaseIdentifiers()) { return name; // 保留原始名 } else if (metaData.storesUpperCaseIdentifiers()) { return StringUtils.upperCase(name); } else if (metaData.storesLowerCaseIdentifiers()) { return StringUtils.lowerCase(name); } else { return name; } }
private void readMetaData() throws SQLException { DatabaseMetaData meta = conn.getConnection().getMetaData(); storesLowerCase = meta.storesLowerCaseIdentifiers(); storesMixedCase = meta.storesMixedCaseIdentifiers(); storesMixedCaseQuoted = meta.storesMixedCaseQuotedIdentifiers();
@Test public void testNoSuchTable() throws Exception { ResultSet resultSet = mock(ResultSet.class); given(resultSet.next()).willReturn(false); given(databaseMetaData.getDatabaseProductName()).willReturn("MyDB"); given(databaseMetaData.getDatabaseProductName()).willReturn("MyDB"); given(databaseMetaData.getDatabaseProductVersion()).willReturn("1.0"); given(databaseMetaData.getUserName()).willReturn("me"); given(databaseMetaData.storesLowerCaseIdentifiers()).willReturn(true); given(databaseMetaData.getTables(null, null, "x", null)).willReturn(resultSet); SimpleJdbcInsert insert = new SimpleJdbcInsert(dataSource).withTableName("x"); // Shouldn't succeed in inserting into table which doesn't exist thrown.expect(InvalidDataAccessApiUsageException.class); try { insert.execute(new HashMap<>()); } finally { verify(resultSet).close(); } }
@Test public void testMatchParameterValuesAndSqlInOutParameters() throws Exception { final String TABLE = "customers"; final String USER = "me"; given(databaseMetaData.getDatabaseProductName()).willReturn("MyDB"); given(databaseMetaData.getUserName()).willReturn(USER); given(databaseMetaData.storesLowerCaseIdentifiers()).willReturn(true); List<SqlParameter> parameters = new ArrayList<>(); parameters.add(new SqlParameter("id", Types.NUMERIC)); parameters.add(new SqlInOutParameter("name", Types.NUMERIC)); parameters.add(new SqlOutParameter("customer_no", Types.NUMERIC)); MapSqlParameterSource parameterSource = new MapSqlParameterSource(); parameterSource.addValue("id", 1); parameterSource.addValue("name", "Sven"); parameterSource.addValue("customer_no", "12345XYZ"); context.setProcedureName(TABLE); context.initializeMetaData(dataSource); context.processParameters(parameters); Map<String, Object> inParameters = context.matchInParameterValuesWithCallParameters(parameterSource); assertEquals("Wrong number of matched in parameter values", 2, inParameters.size()); assertTrue("in parameter value missing", inParameters.containsKey("id")); assertTrue("in out parameter value missing", inParameters.containsKey("name")); assertTrue("out parameter value matched", !inParameters.containsKey("customer_no")); List<String> names = context.getOutParameterNames(); assertEquals("Wrong number of out parameters", 2, names.size()); List<SqlParameter> callParameters = context.getCallParameters(); assertEquals("Wrong number of call parameters", 3, callParameters.size()); }
private void initializeAddInvoiceWithoutMetaData(boolean isFunction) throws SQLException { given(databaseMetaData.getDatabaseProductName()).willReturn("MyDB"); given(databaseMetaData.getUserName()).willReturn("me"); given(databaseMetaData.storesLowerCaseIdentifiers()).willReturn(true); given(callableStatement.execute()).willReturn(false); given(callableStatement.getUpdateCount()).willReturn(-1); if (isFunction) { given(callableStatement.getObject(1)).willReturn(4L); given(connection.prepareCall("{? = call add_invoice(?, ?)}") ).willReturn(callableStatement); } else { given(callableStatement.getObject(3)).willReturn(4L); given(connection.prepareCall("{call add_invoice(?, ?, ?)}") ).willReturn(callableStatement); } }
given(databaseMetaData.getDatabaseProductName()).willReturn("1.0"); given(databaseMetaData.getUserName()).willReturn(USER); given(databaseMetaData.storesLowerCaseIdentifiers()).willReturn(true); given(databaseMetaData.getTables(null, null, TABLE, null)).willReturn(metaDataResultSet); given(databaseMetaData.getColumns(null, USER, TABLE, null)).willReturn(columnsResultSet);
given(databaseMetaData.getDatabaseProductName()).willReturn("1.0"); given(databaseMetaData.getUserName()).willReturn(USER); given(databaseMetaData.storesLowerCaseIdentifiers()).willReturn(true); given(databaseMetaData.getTables(null, null, TABLE, null)).willReturn(metaDataResultSet); given(databaseMetaData.getColumns(null, USER, TABLE, null)).willReturn(columnsResultSet);
@Test public void testNoSuchStoredProcedure() throws Exception { final String NO_SUCH_PROC = "x"; SQLException sqlException = new SQLException("Syntax error or access violation exception", "42000"); given(databaseMetaData.getDatabaseProductName()).willReturn("MyDB"); given(databaseMetaData.getDatabaseProductName()).willReturn("MyDB"); given(databaseMetaData.getUserName()).willReturn("me"); given(databaseMetaData.storesLowerCaseIdentifiers()).willReturn(true); given(callableStatement.execute()).willThrow(sqlException); given(connection.prepareCall("{call " + NO_SUCH_PROC + "()}")).willReturn(callableStatement); SimpleJdbcCall sproc = new SimpleJdbcCall(dataSource).withProcedureName(NO_SUCH_PROC); thrown.expect(BadSqlGrammarException.class); thrown.expect(exceptionCause(sameInstance(sqlException))); try { sproc.execute(); } finally { verify(callableStatement).close(); verify(connection, atLeastOnce()).close(); } }
private static String massageIdentifier(DatabaseMetaData theMetadata, String theCatalog) throws SQLException { String retVal = theCatalog; if (theMetadata.storesLowerCaseIdentifiers()) { retVal = retVal.toLowerCase(); } else { retVal = retVal.toUpperCase(); } return retVal; } }
public String normalizeName(String name, DatabaseMetaData databaseMetaData) throws SQLException { if (databaseMetaData.storesLowerCaseIdentifiers()) { return StringUtil.toLowerCase(name); } if (databaseMetaData.storesUpperCaseIdentifiers()) { return StringUtil.toUpperCase(name); } return name; }
supportsMixedCaseIdentifiers = databaseMetaData.supportsMixedCaseIdentifiers(); storesUpperCaseIdentifiers = databaseMetaData.storesUpperCaseIdentifiers(); storesLowerCaseIdentifiers = databaseMetaData.storesLowerCaseIdentifiers(); storesMixedCaseIdentifiers = databaseMetaData.storesMixedCaseIdentifiers(); supportsMixedCaseQuotedIdentifiers = databaseMetaData.supportsMixedCaseQuotedIdentifiers();
@Override public boolean storesLowerCaseIdentifiers() throws SQLException { try { return databaseMetaData.storesLowerCaseIdentifiers(); } catch (final SQLException e) { handleException(e); return false; } }
@Override public boolean storesLowerCaseIdentifiers() throws SQLException { try { return _meta.storesLowerCaseIdentifiers(); } catch (SQLException e) { handleException(e); return false; } }
@Override public boolean storesLowerCaseIdentifiers() throws SQLException { try { return databaseMetaData.storesLowerCaseIdentifiers(); } catch (final SQLException e) { handleException(e); return false; } }