Java 尝试获取数据时发生SQLException
我正在研究spring应用程序。我面临连接数据库以获取记录的问题。以下是例外情况:Java 尝试获取数据时发生SQLException,java,database,spring,oracle,Java,Database,Spring,Oracle,我正在研究spring应用程序。我面临连接数据库以获取记录的问题。以下是例外情况: Error org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SELECT dstoreNumber, details, VALUE FROM dstore.table1 where value='400s' ]; nested exception is java.sql.SQLExceptio
Error org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SELECT dstoreNumber, details, VALUE FROM dstore.table1 where value='400s' ]; nested exception is java.sql.SQLException: ORA-00942: table or view does not exist
我正在连接两个不同的模式,它们位于两个不同的数据库服务器中。
我在一个类中创建了两个JdbcTemplate对象。下面是我的代码
spring-beans.properties
##### dstore Datasource #####
dstore.dataSource.url=jdbc:oracle:thin:@dstore1.dev.xyz.com:5150:dstore
dstore.dataSource.username=dstore
dstore.dataSource.password=password
##### dscon Datasource #####
dscon.dataSource.url=jdbc:oracle:thin:@dscon.dev.xyz.com:5150:dscon
dscon.dataSource.username=dscon
dscon.dataSource.password=password
src/main/resources/META-INF/datasource-config.xml
<bean name="dstoreDataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<property name="URL" value="${dstore.dataSource.url}" />
<property name="user" value="${dstore.dataSource.username}" />
<property name="password" value="${dstore.dataSource.password}" />
</bean>
<bean name="dsconDataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<property name="URL" value="${dscon.dataSource.url}" />
<property name="user" value="${dscon.dataSource.username}" />
<property name="password" value="${dscon.dataSource.password}" />
</bean>
<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tx:annotation-driven proxy-target-class="false" />
<bean id="dstoreServicingTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="dstoreServicing" />
<qualifier value="servicing" />
</bean>
<bean id="dstoreServicing"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dstoreDataSource" />
<property name="persistenceUnitName" value="dstoreServicing" />
<property name="persistenceXmlLocation"
value="classpath:META-INF/dstore/jpa-persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle9iDialect" />
</bean>
</property>
</bean>
</beans>
<?xml version="1.0"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<aop:aspectj-autoproxy proxy-target-class="false" />
<context:annotation-config />
<tx:annotation-driven transaction-manager="dsconTransactionManager" proxy-target-class="false" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean id="dsconTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dscondatasource" />
<property name="entityManagerFactory" ref="dscon"/>
</bean>
<bean id="dscon" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dscondatasource" />
<property name="persistenceUnitName" value="dscon" />
<property name="persistenceXmlLocation" value="classpath:META-INF/myloans/jpa-persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle9iDialect" />
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
</beans>
src/main/resources/META-INF/spring-beans.xml
<import resource="classpath:META-INF/dstore/dstore-config.xml" />
<import resource="classpath:META-INF/dscon/dscon-config.xml" />
<bean name="jdbcTemplateServicedstore" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dstoreDataSource" />
</bean>
<bean name="jdbcTemplateServicedscon" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dsconDataSource" />
</bean>
src/main/resources/META-INF/dstore/dstore-config.xml
<bean name="dstoreDataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<property name="URL" value="${dstore.dataSource.url}" />
<property name="user" value="${dstore.dataSource.username}" />
<property name="password" value="${dstore.dataSource.password}" />
</bean>
<bean name="dsconDataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<property name="URL" value="${dscon.dataSource.url}" />
<property name="user" value="${dscon.dataSource.username}" />
<property name="password" value="${dscon.dataSource.password}" />
</bean>
<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tx:annotation-driven proxy-target-class="false" />
<bean id="dstoreServicingTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="dstoreServicing" />
<qualifier value="servicing" />
</bean>
<bean id="dstoreServicing"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dstoreDataSource" />
<property name="persistenceUnitName" value="dstoreServicing" />
<property name="persistenceXmlLocation"
value="classpath:META-INF/dstore/jpa-persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle9iDialect" />
</bean>
</property>
</bean>
</beans>
<?xml version="1.0"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<aop:aspectj-autoproxy proxy-target-class="false" />
<context:annotation-config />
<tx:annotation-driven transaction-manager="dsconTransactionManager" proxy-target-class="false" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean id="dsconTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dscondatasource" />
<property name="entityManagerFactory" ref="dscon"/>
</bean>
<bean id="dscon" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dscondatasource" />
<property name="persistenceUnitName" value="dscon" />
<property name="persistenceXmlLocation" value="classpath:META-INF/myloans/jpa-persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle9iDialect" />
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
</beans>
src/main/resources/META-INF/dscon/dscon-config.xml
<bean name="dstoreDataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<property name="URL" value="${dstore.dataSource.url}" />
<property name="user" value="${dstore.dataSource.username}" />
<property name="password" value="${dstore.dataSource.password}" />
</bean>
<bean name="dsconDataSource" class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<property name="URL" value="${dscon.dataSource.url}" />
<property name="user" value="${dscon.dataSource.username}" />
<property name="password" value="${dscon.dataSource.password}" />
</bean>
<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tx:annotation-driven proxy-target-class="false" />
<bean id="dstoreServicingTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="dstoreServicing" />
<qualifier value="servicing" />
</bean>
<bean id="dstoreServicing"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dstoreDataSource" />
<property name="persistenceUnitName" value="dstoreServicing" />
<property name="persistenceXmlLocation"
value="classpath:META-INF/dstore/jpa-persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle9iDialect" />
</bean>
</property>
</bean>
</beans>
<?xml version="1.0"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<aop:aspectj-autoproxy proxy-target-class="false" />
<context:annotation-config />
<tx:annotation-driven transaction-manager="dsconTransactionManager" proxy-target-class="false" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean id="dsconTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dscondatasource" />
<property name="entityManagerFactory" ref="dscon"/>
</bean>
<bean id="dscon" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dscondatasource" />
<property name="persistenceUnitName" value="dscon" />
<property name="persistenceXmlLocation" value="classpath:META-INF/myloans/jpa-persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle9iDialect" />
</bean>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
</property>
</bean>
</beans>
Java类:在下面的类中,myDAO.getMethod2()已成功执行,但当我调用myDAO.getMethod1()时,抛出异常“表或视图不存在”
@组件
类装入数据{
@注入
私人密道密道;
//从数据库中获取值
@施工后
public void loadListCodes()
{
最终列表listValues=myDAO.getMethod2();//已成功连接到数据库
试一试{
final List listValue=myDAO.getMethod1();//无法连接到数据库,引发异常
LOG.info(“方法1:+listValue”);
}捕获(例外e){
日志信息(“异常”+e);
System.out.println(“异常为::”+e);
}
//逻辑就在这里
}
}
Java类:
@Repository
public class MyDAOJDBCImpl implements MyDAO
{
@Inject
@Qualifier("jdbcTemplateServicedstore")
private JdbcTemplate jdbcTemplate1;
@Inject
@Qualifier("jdbcTemplateServicedscon")
private JdbcTemplate jdbcTemplate2;
private static final String SQL1 = "SELECT dstoreNumber, details, VALUE FROM dstore.table1 "
+ "WHERE value = '400S' ";
private static final String SQL2 = "SELECT dsconNumber, details, VALUE FROM dscon.table1 "
+ "WHERE value = '700S' ";
public List<MyDTO> getMethod1()
{
//unable to connect to database, throwing exception
List<MyDTO> listValues = null;
LOG.info("Retrieving data..");
try
{
listValues = jdbcTemplate1.query(SQL1,
new RowMapper<ListValueDTO>()
{
public MyDTO mapRow(final ResultSet rs, final int rowNum) throws SQLException
{
final MyDTO listValueDTO = new MyDTO();
listValueDTO.setdstoreNumber(rs.getString("dstoreNumber));
listValueDTO.setDetails(rs.getString("details"));
listValueDTO.setValue(rs.getString("value"));
return listValueDTO;
}
});
}
catch (Exception e)
{
LOG.error("Error :" + e);
}
return listValues;
}
public List<MyDTO> getMethod2()
{
List<MyDTO> listValues = null;
LOG.info("Retrieving data..");
try
{
listValues = jdbcTemplate2.query(SQL2,
new RowMapper<ListValueDTO>()
{
public MyDTO mapRow(final ResultSet rs, final int rowNum) throws SQLException
{
final MyDTO listValueDTO = new MyDTO();
//code goes here
return listValueDTO;
}
});
}
catch (Exception e)
{
LOG.error("Error :" + e);
}
return listValues;
}
}
@存储库
公共类MyDAOJDBCImpl实现MyDAO
{
@注入
@限定符(“jdbcTemplateServicedstore”)
私有JdbcTemplate jdbcTemplate1;
@注入
@限定符(“jdbcTemplateServicedscon”)
私有JdbcTemplate jdbcTemplate2;
私有静态最终字符串SQL1=“从dstore.table1中选择dstoreNumber、详细信息、值”
+“其中值='400S';
私有静态最终字符串SQL2=“从dscon.table1中选择dsconNumber、details、VALUE”
+“其中值='700S';
公共列表getMethod1()
{
//无法连接到数据库,引发异常
listValues=null;
LOG.info(“检索数据…”);
尝试
{
listValues=jdbcTemplate1.query(SQL1,
新的行映射器()
{
公共MyDTO映射行(最终结果集rs,最终int rowNum)引发SQLException
{
最终MyDTO listValueDTO=新MyDTO();
listValueDTO.setdstoreNumber(rs.getString(“dstoreNumber”);
listValueDTO.setDetails(rs.getString(“详细信息”);
listValueDTO.setValue(rs.getString(“值”));
返回listValueDTO;
}
});
}
捕获(例外e)
{
日志错误(“错误:+e”);
}
返回列表值;
}
公共列表getMethod2()
{
listValues=null;
LOG.info(“检索数据…”);
尝试
{
listValues=jdbcTemplate2.query(SQL2,
新的行映射器()
{
公共MyDTO映射行(最终结果集rs,最终int rowNum)引发SQLException
{
最终MyDTO listValueDTO=新MyDTO();
//代码在这里
返回listValueDTO;
}
});
}
捕获(例外e)
{
日志错误(“错误:+e”);
}
返回列表值;
}
}
PS:我连接到两个不同的表,它们位于两个不同的数据库服务器和不同的模式中找不到架构或无法连接到其他数据库服务器。如何解决此问题?以前有人遇到过此问题。我需要在单个java类中调用并执行不同服务器中的不同数据库表。异常
ORA-00942:表或视图不存在
通常意味着表不存在,例如例如,您在表名中犯了错误,或者您没有权限从此表中选择。我有一个表,我有权限。.我可以在TOAD中执行查询并获得结果。.我猜我上面提到的代码中的某些映射是错误的。您在TOAD和您的应用程序中使用的是同一个Oracle用户吗?是的,您的意思是要使用的凭据连接到数据库?@reosys,如果您可以在TOAD上执行该语句,那么您可能会在应用程序中执行该语句。可能您使用的是其他用户或执行的是其他语句。