2016-05-16 1534 views
1

我正在學習如何使用以下代碼將hibernate與spring集成到Oracle 11g中。但是從幾天就陷入了同樣的錯誤。請幫我解決這個問題。我已經嘗試了其他解決方案中提到的不同解決方案,以解決相同錯誤的問題,但沒有運氣。java.sql.SQLException:調用中的無效參數

歡迎任何相關解決方案。

感謝,

尼莎

spring.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 

    <bean id="serverDatasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" > 
      <value>oracle.jdbc.driver.OracleDriver</value> 
     </property> 
     <property name="url" > 
      <value>jdbc:oracle:thin:@10.23.225.22:1521:PRACTICE</value> 
     </property> 
     <!-- <property name="username" value="SCOTT"/> 
     <property name="password" value="tiger"/>--> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter"> 
     <property name="targetDataSource" ref="serverDatasource"/> 
     <property name="username"><value>SCOTT</value></property> 
     <property name="password"><value>tiger</value></property> 
    </bean> 


    <!-- Hibernate 5 SessionFactory bean definition --> 
    <bean id="Hibernate5SessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="annotatedClasses"> 
      <list> 
       <value>com.springHibernate.model.Person</value> 
      </list> 
     </property> 
     <property name="HibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> 
       <prop key="hibernate.current_session_context_class">thread</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="personDao" class="com.springHibernate.dao.PersonDaoImpl"> 
     <property name="sessionFactory" ref="Hibernate5SessionFactory"></property> 
    </bean> 
</beans> 

主要方法:SpringHibernateMain

 package com.springHibernate.main; 

     import java.util.List; 
     import org.springframework.context.support.ClassPathXmlApplicationContext; 
     import com.springHibernate.dao.PersonDao; 
     import com.springHibernate.model.Person; 

     public class SpringHibernateMain { 

      public static void main(String[] args) { 

       ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 

       PersonDao personDao = context.getBean(PersonDao.class); 

       Person p = new Person(); 

       p.setId(1); 
       p.setName("John"); 
       p.setCountry("United States"); 

       personDao.save(p); 

       List<Person> person = personDao.listPerson(); 

       for(Person p1 : person){ 
        System.out.println("Person List:" + p1); 
       } 

      } 

     } 

堆棧跟蹤:

ERROR: Unable obtain JDBC Connection 
java.sql.SQLException: invalid arguments in call 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:236) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:130) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.doGetConnection(UserCredentialsDataSourceAdapter.java:162) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.getConnection(UserCredentialsDataSourceAdapter.java:145) 
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 
    at org.hibernate.internal.SessionFactoryImpl$3.obtainConnection(SessionFactoryImpl.java:643) 
    at org.hibernate.hql.spi.id.IdTableHelper.executeIdTableCreationStatements(IdTableHelper.java:67) 
    at org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:125) 
    at org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy.finishPreparation(GlobalTemporaryTableBulkIdStrategy.java:42) 
    at org.hibernate.hql.spi.id.AbstractMultiTableBulkIdStrategyImpl.prepare(AbstractMultiTableBulkIdStrategyImpl.java:88) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:451) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) 
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:416) 
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:401) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.springHibernate.main.SpringHibernateMain.main(SpringHibernateMain.java:14) 

May 16, 2016 12:59:16 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 17433, SQLState: null 
May 16, 2016 12:59:16 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: invalid arguments in call 
Exception in thread "main" org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:87) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:109) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:227) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:234) 
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:214) 
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:52) 
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1525) 
    at com.springHibernate.dao.PersonDaoImpl.save(PersonDaoImpl.java:25) 
    at com.springHibernate.main.SpringHibernateMain.main(SpringHibernateMain.java:24) 
Caused by: java.sql.SQLException: invalid arguments in call 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:236) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:414) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153) 
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155) 
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:130) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.doGetConnection(UserCredentialsDataSourceAdapter.java:162) 
    at org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.getConnection(UserCredentialsDataSourceAdapter.java:145) 
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) 
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:386) 
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:84) 
    ... 8 more 
+0

嘗試將您的用戶名/密碼屬性移動到您配置db url的數據源中 – Nadir

+0

我看到您使用的是Oracle 9方言,這可能是問題所在。 – jr593

+0

我已經試過最初只有Nadir,得到同樣的錯誤。 – Nisha

回答

0

解決了這個,最後,只需添加在Hibernate中的zip文件中的lib /所需的文件夾的罐子。直到那時我已經在lib文件夾中添加了所有的jar。

0

相反

PersonDao personDao = context.getBean(PersonDao.class); 

PersonDao personDao = (PersonDao) context.getBean("personDao"); 

所以你的bean的id嘗試在spring.xml

+0

我調試了代碼,發現錯誤是在ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(「spring.xml」) 之後執行,並且在執行下一行之前是 PersonDao personDao = context.getBean(PersonDao.class) – Nisha

0

,因爲它在堆棧跟蹤中提到它是無法獲得連接。

invalid arguments in call 
Exception in thread "main" org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection 

在數據源驅動程序的名稱應該像下面

  <value>oracle.jdbc.OracleDriver</value> 
+0

Hi Vijendra,我提出了修改建議,但仍面臨同樣的問題 – Nisha

+0

嗨Nisha你可以分享你的pom.xml文件。我嘗試使用spring.xm配置連接到我的數據庫,並且能夠獲得連接。 –

+0

我不使用maven。所以我沒有得到一個pom.xml:| – Nisha