线程“main”中的异常java.lang.ClassCastException:org.springframework.jdbc.datasource.DriverManagerDataSource无法强制转换

时间:2015-08-19 09:31:27

标签: java mysql spring maven jdbc

我正在尝试使用jdbc模板将数据插入数据库。我在mysql数据库中使用数据库frr在那个表下面的问题是我写的代码,但我得到以下错误:

    String cname = bundle.getString("catagory_name");
    String jorelnm = bundle.getString("jorel");
    String bestseller = bundle.getString("bestseller");

    if (cname != null) {
        Toast.makeText(getActivity(), cname, Toast.LENGTH_LONG).show();
    } else if (jorlenm != null) {
        Toast.makeText(getActivity(), jorlenm, Toast.LENGTH_LONG).show();
    } //..

App.java文件:

Exception in thread "main" java.lang.ClassCastException: org.springframework.jdbc.datasource.DriverManagerDataSource cannot be cast to sql.sql.App
    at sql.sql.App.main(App.java:25)

web.xml:

package sql.sql;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;


public class App 
{
    public static void main( String[] args )
    {
        ApplicationContext context = 
                new ClassPathXmlApplicationContext("web.xml");
        App obj = (App) context.getBean("dataSource");
         JdbcTemplate jdbcTemplateObject = new JdbcTemplate();
        String SQL = "insert into issues(issue,status,comment) values (?, ?, ?)";
        jdbcTemplateObject.update( SQL, new Object[]{"Zara", "test", "123"} );
        System.out.println( "Hello World!" );
    }
}

pom.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   <property name="url" value="jdbc:mysql://localhost:3306/frr"/>
   <property name="username" value="root"/>
   <property name="password" value=""/>
</bean>

</beans>

3 个答案:

答案 0 :(得分:3)

您的代码存在多处问题。

首先DriverManagerDataSourceDataSource,而不是App类的实例。 (我建议在类继承上进行一些谷歌搜索)。

DataSource ds = context.getBean("dataSource", DataSource.class);

第二,如果这个问题得到解决,你的代码在构建JdbcTemplate或执行查询时都会失败,因为JdbcTemplate需要DataSource它无法在空中运行。

JdbcTemplate jdbcTemplateObject = new JdbcTemplate(ds);

我建议您将JdbcTemplate添加到配置中并检索而不是DataSource

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

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost:3306/frr"/>
       <property name="username" value="root"/>
       <property name="password" value=""/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

</beans>

然后将主要代码更改为以下内容。

public class App {

    public static void main( String[] args ) {

        ApplicationContext context =  new ClassPathXmlApplicationContext("web.xml");
        JdbcTemplate jdbcTemplateObject = context.getBean(JdbcTemplate.class);
        String SQL = "insert into issues(issue,status,comment) values (?, ?, ?)";
        jdbcTemplateObject.update( SQL, new Object[]{"Zara", "test", "123"} );
        System.out.println( "Hello World!" );
    }
}

注意:我也怀疑你的xml实际上是在工作(或者pom是你正在使用的pom)。 xml包含对3.0 xsd bean的引用,而你的pom使用2.5版本的Spring。

答案 1 :(得分:1)

context.getBean("dataSource");返回一个DataSource而不是App类的对象。

DataSource obj = (DataSource) context.getBean("dataSource");
JdbcTemplate jdbcTemplateObject = new JdbcTemplate(obj);

答案 2 :(得分:1)

修改您的代码,如下所示

public class App 
    {
        public static void main( String[] args )
        {
            ApplicationContext context = 
                    new ClassPathXmlApplicationContext("web.xml");
            DataSource obj = (DataSource) context.getBean("dataSource");
             JdbcTemplate jdbcTemplateObject = new JdbcTemplate(obj);
            String SQL = "insert into issues(issue,status,comment) values (?, ?, ?)";
            jdbcTemplateObject.update( SQL, new Object[]{"Zara", "test", "123"} );
            System.out.println( "Hello World!" );
        }
    }