简体   繁体   中英

Error while connecting to database using spring framework

I get the error:

java.sql.SQLException: Invalid Oracle URL specified
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:428)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:190)
    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:120)
    at com.Templates.DBOperation.DBOperationBean.fetchName(DBOperationBean.java:34)
    at com.Templates.DBOperation.DBOperationClient.main(DBOperationClient.java:29)

Here is my code:

ApplicationContext.xml file:

<beans>
 <bean id = "drds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name = "driverClassName" value = "oracle.jdbc.driver.OracleDriver"/>
        <property name = "url" value = "jdbc:oracle:thin@localhost:1521:orcl"/>
        <property name = "username" value = "templates"/>
        <property name = "password" value = "templates"/>
    </bean>

    <bean id = "dob" class="com.Templates.DBOperation.DBOperationBean">
        <property name = "ds" ref = "drds"/>
    </bean>
</beans>

Bean class:

public class DBOperationBean implements DBOperation {

    //Bean Property
    DataSource ds;

    //Setter method to support injection
    public void setDs(DataSource ds) {
        this.ds = ds;
    }

    //implement bean methods
    @Override
    public String fetchName(String ename) {
        //To change body of generated methods, choose Tools | Templates.
        String name = null;
        try {
            //get one connection object from connection pool
            Connection con = ds.getConnection();
            //get emp name
            PreparedStatement pst = con.prepareStatement("select name from employee where empno = ?");
            int empno = 1;
            pst.setInt(1, empno);

            ResultSet rs = pst.executeQuery();

            if (rs.next()) {
                name = rs.getString("NAME");
            } else {
                name = "record not found";
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return name;
    }

    @Override
    public int fetchSalary(int empNo) {
        int sal = 0;

        try {

            Connection con = ds.getConnection();
            PreparedStatement pst = con.prepareStatement("select sal from employee where sal =?");
            pst.setInt(1, sal);
            ResultSet rs = pst.executeQuery();
            while(rs.next())
            {
                sal = rs.getInt("SAL");
            }
        } catch (Exception e) {
        }
        return sal;
    }
}

And client class:

public class DBOperationClient {
    public static void main(String[] args) {
        Resource res = new ClassPathResource("applicationContext.xml");

        //Activate bean factory container
        BeanFactory fac = new XmlBeanFactory(res);

        //get spring bean from container
        DBOperation beanObject = (DBOperation)fac.getBean("dob");

        //call bean methods
        System.out.println("Employee name is: " + beanObject.fetchName("NAME"));
        System.out.println("Employee salary is: " + beanObject.fetchSalary(1));
    }
}

I went through other similar questions on stackoverflow and modified the url which didn't work. The url looks alright but still I get the same error: Invalid Oracle URL specified

You're missing a colon after "thin".

http://razorsql.com/docs/help_oracle.html

Try it like this:

<beans>
 <bean id = "drds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name = "driverClassName" value = "oracle.jdbc.driver.OracleDriver"/>
        <property name = "url" value = "jdbc:oracle:thin:@localhost:1521:orcl"/>
        <property name = "username" value = "templates"/>
        <property name = "password" value = "templates"/>
    </bean>

    <bean id = "dob" class="com.Templates.DBOperation.DBOperationBean">
        <property name = "ds" ref = "drds"/>
    </bean>
</beans>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM