【问题标题】:Spring sql database connecting exceptionSpring sql数据库连接异常
【发布时间】:2016-03-10 04:49:43
【问题描述】:

我刚开始学习春天。我试图使用 spring 从我的数据库中获取数据,但是从 xml 文件中得到了异常。我不知道是什么问题,我搜索了很多但无法解决它。请帮帮我。任何帮助,将不胜感激。提前致谢。

主类

package com.spring.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {

    @SuppressWarnings("resource")
    public static void main(String[] args) {


        ApplicationContext cntxt = new ClassPathXmlApplicationContext("spring.xml");
        JdbcDaoImpl dao = cntxt.getBean("JdbcDaoImpl", JdbcDaoImpl.class);
        UserModel model = dao.getUserName("admin");


        model.display();
   }
}

道隐含

package com.spring.demo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class JdbcDaoImpl {
    @Autowired
    private DataSource dataSource;

    public DataSource getDataSource() {
        return dataSource;
    }

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public UserModel getUserName(String userName){
        Connection con = null;

        try{
            con = dataSource.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from userinfo where userName = ?");
            ps.setString(1, "vaibhav");
            UserModel model = null;
            ResultSet rs = ps.executeQuery();
            if(rs.next()){
                model = new UserModel();
                model.setUserName(rs.getString("userName"));
            }
            rs.close();
            ps.close(); 
            return model;
        }
        catch(Exception e){
            throw new RuntimeException(e);
        }
        finally{
            try{
                con.close();
            }
            catch(SQLException s){

            }
        }
    }



}

SPRING.XML

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
   <context:annotation-config />
   <context:component-scan base-package="com.spring.demo" />


   <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/testing" />
   <property name="userName" value="vaibhav" />
   <property name="password" value="bhopal@123" />
   </bean> 

</beans>

控制台

Dec 05, 2015 12:10:16 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1c12fb0: startup date [Sat Dec 05 12:10:16 IST 2015]; root of context hierarchy
Dec 05, 2015 12:10:16 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.xml]
Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 20 in XML document from class path resource [spring.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 69; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'property'.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:608)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:509)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.spring.demo.MainApp.main(MainApp.java:12)
Caused by: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 69; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'property'.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.emptyElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
    ... 14 more

【问题讨论】:

  • 你得到了哪个异常?
  • @Berger - 对此感到抱歉。我已经更新了异常
  • jdbc:mysql://localhost:3306/testing 替换 jdbc:mysql://localhost/testing 如果不工作而不是告诉发生了哪个错误
  • @sanjay - 这就是得到的结果 - 线程“main”org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException 中的异常:来自类路径资源 [spring.xml] 的 XML 文档中的第 37 行是无效的;嵌套异常是 org.xml.sax.SAXParseException;行号:37;列号:95; cvc-complex-type.2.4.c:匹配通配符是严格的,但找不到元素“bean”的声明。

标签: java xml spring spring-mvc


【解决方案1】:

在 spring.xml 文件中的 xsi:schemaLocation 上添加这两行

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd

And I notice <beans:beans .....> so also change <bean id="..."> to <beans:bean id="..."> 

And also access property like this:
<beans:property>

【讨论】:

  • 现在还有一个异常:线程“main”org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException中的异常:来自类路径资源[spring.xml]的XML文档中的第28行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:28;列号:69; cvc-complex-type.2.4.c:匹配通配符是严格的,但找不到元素“属性”的声明。引起:org.xml.sax.SAXParseException;行号:28;列号:69; cvc-complex-type.2.4.c:匹配的通配符是严格的,但是找不到元素'property'的声明。
  • 访问属性如下: in spring.xml 文件
【解决方案2】:

您的 xml 命名空间似乎已损坏。当您通过 xml 使用 bean 时。使用 bean 作为默认命名空间。已更正您的 spring.xml 并成功验证它。所以,下面的 xml sn-p 应该适合你。

 <?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:mvc="http://www.springframework.org/schema/mvc"
  xmlns:jdbc="http://www.springframework.org/schema/jdbc"   xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

<context:annotation-config />
<context:component-scan base-package="com.spring.demo" />


<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/testing" />
   <property name="userName" value="vaibhav" />
   <property name="password" value="bhopal@123" />
</bean>

</beans>

您声明了 mvc 和 jdbc 命名空间,但没有将它们与各自的 xsd 文档一起引用以进行验证。如果上面的代码不起作用,请告诉我!

【讨论】:

  • 警告:上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建类路径资源中定义的名称为“dataSource”的bean时出错[spring.xml]:错误设置属性值;嵌套异常是 org.springframework.beans.NotWritablePropertyException:bean 类 [org.springframework.jdbc.datasource.DriverManagerDataSource] 的无效属性“userName”:Bean 属性“userName”不可写或设置方法无效。您指的是“用户名”吗?
  • 所以,您已经完成了 xml 验证错误。是的,尝试使用用户名。会看到的。
  • 完成了...我更正了。现在还有另一个。你能在我犯错误的地方也清除它吗? - 线程“main”java.lang.ClassCastException 中的异常:org.springframework.jdbc.datasource.DriverManagerDataSource 无法在 com.example.Main.main(Main.java:12) 处转换​​为 com.example.UserModel
  • 嘿伙计,这样不行。在此处粘贴 UserModel 类的代码和 db 表。我会为你做的!
  • 已解决您的问题。似乎你错过了一些其他的东西。
【解决方案3】:

util 命名空间添加到您的声明中:

xmlns:util="http://www.springframework.org/schema/util"

对于 schemaLocation :

 http://www.springframework.org/schema/util
 http://www.springframework.org/schema/util/spring-util-2.5.xsd

【讨论】:

  • 添加这些后,我得到的和我得到的一样 - 线程“main”中的异常 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自类路径资源的 XML 文档中的第 37 行 [spring .xml] 无效;嵌套异常是 org.xml.sax.SAXParseException;行号:37;列号:95; cvc-complex-type.2.4.c:匹配通配符是严格的,但找不到元素“bean”的声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2013-10-26
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
相关资源
最近更新 更多