2015-08-19 5 views
0

Я пытаюсь вставить данные в базу данных с использованием шаблона jdbc. Я использую FRR базы данных в базе данных MySQL в том, что вопросы, таблицы ниже мой код, который я написал, но я получаю ниже ошибки:Исключение из потока "main" java.lang.ClassCastException: org.springframework.jdbc.datasource.DriverManagerDataSource не может быть отличен

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) 

App.java Файл:

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

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

pom.xml файл:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>sql</groupId> 
    <artifactId>sql</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>sql</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
    </dependency> 


    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.9</version> 
    </dependency> 

    </dependencies> 
</project> 
+4

Что заставляет вас думать, что «DriverManagerDataSource» является экземпляром 'App'? Даже если вы исправили, что ваш код не сработает с помощью 'JdbcTemplate', поскольку вы не помещаете в него« DataSource », значит, он не сработает. Я настоятельно рекомендую учебник или 2, чтобы понять, как использовать эти классы. –

+0

, потому что приложение пытается получить доступ к базе данных mysql – Labeo

+0

Как вы думаете, 'DriverManagerDataSource' расширяет ваш класс' App'? Я настоятельно рекомендую прочитать наследование классов и как это работает ... Кажется, вам не хватает базового понимания этого. –

ответ

3

Есть несколько вещей неправильно с вашим кодом.

Первый a DriverManagerDataSource является DataSource НЕ экземпляр вашего App класса. (Я предлагаю немного googling на наследование класса).

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 на самом деле работает (или, что П является П вы используете). Xml содержал ссылку на 3,0 xsd бобов, в то время как ваш pom использует версию Spring версии 2.5.

1

context.getBean("dataSource"); возвращает DataSource, а не объект класса App.

DataSource obj = (DataSource) context.getBean("dataSource"); 
JdbcTemplate jdbcTemplateObject = new JdbcTemplate(obj); 
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!"); 
     } 
    }