【问题标题】:Error while connecting to database using spring framework使用spring框架连接数据库时出错
【发布时间】:2015-11-06 10:25:16
【问题描述】:

我得到错误:

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)

这是我的代码:

ApplicationContext.xml 文件:

<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>

豆类:

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;
    }
}

和客户端类:

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));
    }
}

我在 stackoverflow 上查看了其他类似的问题,并修改了不起作用的 url。 url 看起来没问题,但我仍然收到相同的错误:指定的 Oracle URL 无效

【问题讨论】:

    标签: java spring


    【解决方案1】:

    “瘦”后缺少一个冒号。

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

    试试这样:

    <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>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 2017-06-26
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2014-10-04
    • 1970-01-01
    相关资源
    最近更新 更多