写了一个spring小程序,set报null错误,请问各位大神是为什么啊

mixturer 2015-06-21 01:43:35
使用apacha的basicdatasource连接池,写了一个spring小程序,测试获得mySQL数据库连接,set注入数据库连接的基本参数后,提示错误
Exception in thread "main" java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2023)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1897)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
at com.alex.util.MySQLDataSource.getConnection(MySQLDataSource.java:43)
at com.alex.util.test.TestCase.main(TestCase.java:16)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2007)
... 4 more

后多次修改调试,发现问题出在
 	public MySQLDataSource() {
bds = new BasicDataSource();
bds.setDriverClassName(driver);
bds.setUrl(url);
bds.setUsername(username);
bds.setPassword(password);
}

修改成


 public MySQLDataSource() {
bds = new BasicDataSource();
}

@Override
public Connection getConnection() throws SQLException{
bds.setDriverClassName(driver);
bds.setUrl(url);
bds.setUsername(username);
bds.setPassword(password);
return bds.getConnection();
}

提示可以获得链接,请问这是为什么啊,是注入顺序问题吗,我百度过之后,还是无解,本人小白,求指教。附所有源代码。

applicationContext.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:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:util="http://www.springframework.org/schema/util"

xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
">

<bean id="mydatasource" class="com.alex.util.MySQLDataSource">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/jsd1407?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
</beans>


interface:

package com.alex.util;

import java.sql.Connection;
import java.sql.SQLException;

public interface DataSource {

public abstract Connection getConnection() throws SQLException;

public abstract void closeConnection() throws SQLException;

}


MySQLDataSource:

 package com.alex.util;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbcp2.BasicDataSource;

public class MySQLDataSource implements DataSource {

private String driver;
private String url;
private String username;
private String password;
private BasicDataSource bds;

public void setDriver(String driver) {
this.driver = driver;
}

public void setUrl(String url) {
this.url = url;
}

public void setUsername(String username) {
this.username = username;
}

public void setPassword(String password) {
this.password = password;
}

public MySQLDataSource() {
bds = new BasicDataSource();
}

@Override
public Connection getConnection() throws SQLException{
bds.setDriverClassName(driver);
bds.setUrl(url);
bds.setUsername(username);
bds.setPassword(password);
return bds.getConnection();
}

@Override
public void closeConnection() throws SQLException{
bds.close();
}
}

...全文
233 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mixturer 2015-06-24
  • 打赏
  • 举报
回复
楼上你好,按照你的知道我测试了一下,OK没有问题,我有个问题,如果不使用set的话,BasicDataSource没有被设置值啊,为什么可以得到数据源?
研发与思维 2015-06-21
  • 打赏
  • 举报
回复
spring加载时应该是这样的顺序,先实例化MySQLDataSource,然后spring再去设置你的那几个属性,而不是你自已去手动set那几个属性。 问题原因应该是spring实例化对象后还没有set那和个属性,你就开始调连接了。 你的getConnection里面的几个set操作是可以去掉的。
mixturer 2015-06-21
  • 打赏
  • 举报
回复
包都有的,我测试过了,就是
bds.setDriverClassName(driver);
        bds.setUrl(url);
        bds.setUsername(username);
        bds.setPassword(password);
修改了一下位置就好了,我自己测试通过了,就是不知道为什么就好了,导包都OK的
xzc8861153 2015-06-21
  • 打赏
  • 举报
回复
你的错误提示是数据库的jar包不对,你看下是不是你没导入jar包,或者jar包导错了。 不报错了记得写个测试程序看看是否真的连接上了
mixturer 2015-06-21
  • 打赏
  • 举报
回复
我这边的包是对的,我给你截图看一下,程序我还在增加功能,估计有点乱,所以你先看看截图的包能不能OK
Inhibitory 2015-06-21
  • 打赏
  • 举报
回复
Caused by: java.sql.SQLException: No suitable driver 数据库的驱动jar包版本不对

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧