【问题标题】:java.sql.SQLException: Table/View 'LOCATION' already exists in Schema 'APP'java.sql.SQLException:表/视图“位置”已存在于模式“应用程序”中
【发布时间】:2016-02-26 22:50:48
【问题描述】:

我正在 JBOSS EAP 6.2 中开发和部署 RESTful 服务。对于这个任务,我使用 CXF、Spring 和 Embedded Derby 进行数据存储。 我花了几个小时试图调试这个错误,但无法实现。我已经检查了很多次数据库是完全空的并且没有任何表。但我总是收到相同的堆栈跟踪。 我也阅读了类似的问题,但这也没有帮助。 所以,这里是代码:

资源类

package rest_3;

import java.sql.SQLException;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

@Path("/dataservice")
@Produces({"application/xml", "application/json"})
@Consumes({"application/xml", "application/json"})
public class DataService {

    private ApplicationContext context = new ClassPathXmlApplicationContext("rest_3/servicebean.xml");
    private DAO dao = (DAO) context.getBean("daoBean");

    public DataService(DAO dao) {

    }

    @GET
    @Path("/location/{id}")
    public Location getLocation(@PathParam("id") int id) throws SQLException {
        Location loc = dao.getLocation(id);
        if (loc == null) {
            ResponseBuilder builder = Response.status(Status.BAD_REQUEST);
            builder.type("application/xml");
            builder.entity("<error>Location Not Found</error>");
            throw new WebApplicationException(builder.build());
        } 
        return loc;
    }

    @POST
    @Path("/location")
    public Response addLocation(Location loc) throws SQLException {
        if(loc == null)
            return Response.status(Status.BAD_REQUEST).build();
        dao.addLocation(loc);
        return Response.ok().build();
    }

    @DELETE
    @Path("/location/{id}")
    public Response deleteLocation(@PathParam("id") int id) throws SQLException {
        Location loc = dao.getLocation(id);
        if(loc == null) 
            return Response.status(Status.BAD_REQUEST).build();
        dao.deleteLocation(id);
        return Response.ok().build();

    }

    @PUT
    @Path("/location")
    public Response updateLocation(Location loc) throws SQLException {
        if(dao.getLocation(loc.getId()) == null)
            return Response.status(Status.BAD_REQUEST).build();
        dao.updateLocation(loc);
        return Response.ok().build();
    }

    @DELETE
    @Path("/location")
    public void dropTable() throws SQLException {
        dao.dropTable();
    }


}

DAO 类

package rest_3;


import java.sql.*;

import org.apache.derby.jdbc.EmbeddedDataSource;

public class DAO {

    private static Connection conn;
    private static Statement statement;
    private static PreparedStatement prep;

    public DAO() throws SQLException {
        this.load();
    }

    public void load() throws SQLException {

        EmbeddedDataSource ds = new EmbeddedDataSource(); 
        ds.setDatabaseName("derbyDB");
        ds.setCreateDatabase("create");
        conn = ds.getConnection();
        statement = conn.createStatement();
        statement.execute("create table location(id int, country varchar(40))");
        statement.execute("insert into location values(1, 'MEXICO')");
        statement.execute("insert into location values(2, 'SPAIN')");
        statement.execute("insert into location values(3, 'UK')");
        statement.execute("insert into location values(4, 'ITALY')");
        statement.execute("insert into location values(5, 'JAPAN')");

    }


    public Location getLocation(int id) throws SQLException {
        ResultSet rs = statement.executeQuery("select from location where id = "  + id);
        rs.next();
        return new Location(rs.getInt("id"), rs.getString("country"));
    }

    public void addLocation(Location loc) throws SQLException{
        int id = loc.getId();
        String country = loc.getCountry();
        prep = conn.prepareStatement("insert into location values(?,?)");
        prep.setInt(1, id);
        prep.setString(2, country);
        prep.execute();
    }

    public void deleteLocation(int id) throws SQLException{
        statement = conn.createStatement();
        statement.executeUpdate("delete from location where id = " + id);

    }

    public void updateLocation(Location loc) throws SQLException {
        int id = loc.getId();
        String country = loc.getCountry();
        statement = conn.createStatement();
        statement.execute("update location set country = " + country + " where id = " + id);
    }

    public void dropTable() throws SQLException {
        statement = conn.createStatement();
        statement.execute("drop table location");
    }

}

服务和 DAO bean。

<?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-2.0.xsd">

<bean id="dataService" class="rest_3.DataService">
    <constructor-arg ref ="daoBean"/>
</bean>

<bean id="daoBean" class="rest_3.DAO">
</bean>

</beans>

服务 bean 配置

<?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:jaxrs="http://cxf.apache.org/jaxrs"
  xmlns:cxf="http://cxf.apache.org/core"
  xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
  <import resource="classpath:META-INF/cxf/cxf.xml" />
  <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
  <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 <jaxrs:server id="DataService" address="/">
    <jaxrs:features>
     <cxf:logging/>
</jaxrs:features>
<jaxrs:serviceBeans>
      <ref bean="dataService" />
    </jaxrs:serviceBeans>
  </jaxrs:server>
</beans>

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        WEB-INF/beans.xml
        classpath:rest_3/servicebean.xml
        </param-value>
  </context-param>
  <listener>
    <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
  </listener>
  <servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

堆栈跟踪:

16:28:05,892 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/rest_3]] (ServerService Thread Pool -- 47) JBWEB000287: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'DataService': Cannot resolve reference to bean 'dataService' while setting bean property 'serviceBeans' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataService' defined in class path resource [rest_3/servicebean.xml]: Cannot resolve reference to bean 'daoBean' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoBean' defined in class path resource [rest_3/servicebean.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [rest_3.DAO]: Constructor threw exception; nested exception is java.sql.SQLException: Table/View 'LOCATION' already exists in Schema 'APP'.
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:287) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:126) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1245) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) [spring-beans-2.5.5.jar:2.5.5]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_79]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729) [spring-context-2.5.5.jar:2.5.5]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381) [spring-context-2.5.5.jar:2.5.5]
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) [spring-web-2.5.5.jar:2.5.5]
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) [spring-web-2.5.5.jar:2.5.5]
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) [spring-web-2.5.5.jar:2.5.5]
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3339) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3777) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:156) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_79]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_79]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataService' defined in class path resource [rest_3/servicebean.xml]: Cannot resolve reference to bean 'daoBean' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoBean' defined in class path resource [rest_3/servicebean.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [rest_3.DAO]: Constructor threw exception; nested exception is java.sql.SQLException: Table/View 'LOCATION' already exists in Schema 'APP'.
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:495) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:162) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:925) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:835) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) [spring-beans-2.5.5.jar:2.5.5]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_79]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) [spring-beans-2.5.5.jar:2.5.5]
    ... 31 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoBean' defined in class path resource [rest_3/servicebean.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [rest_3.DAO]: Constructor threw exception; nested exception is java.sql.SQLException: Table/View 'LOCATION' already exists in Schema 'APP'.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:883) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:839) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) [spring-beans-2.5.5.jar:2.5.5]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.7.0_79]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) [spring-beans-2.5.5.jar:2.5.5]
    ... 46 more
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [rest_3.DAO]: Constructor threw exception; nested exception is java.sql.SQLException: Table/View 'LOCATION' already exists in Schema 'APP'.
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61) [spring-beans-2.5.5.jar:2.5.5]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877) [spring-beans-2.5.5.jar:2.5.5]
    ... 57 more
Caused by: java.sql.SQLException: Table/View 'LOCATION' already exists in Schema 'APP'.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source) [derby-10.12.1.1.jar:]
    at rest_3.DAO.load(DAO.java:25) [classes:]
    at rest_3.DAO.<init>(DAO.java:15) [classes:]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_79]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_79]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_79]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [rt.jar:1.7.0_79]
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100) [spring-beans-2.5.5.jar:2.5.5]
    ... 59 more
Caused by: ERROR X0Y32: Table/View 'LOCATION' already exists in Schema 'APP'.
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.duplicateDescriptorException(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.sql.catalog.DataDictionaryImpl.addDescriptor(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.sql.execute.CreateTableConstantAction.executeConstantAction(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.sql.execute.MiscResultSet.open(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source) [derby-10.12.1.1.jar:]
    at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source) [derby-10.12.1.1.jar:]
    ... 69 more

16:28:05,938 ERROR [org.apache.catalina.core] (ServerService Thread Pool -- 47) JBWEB001103: Error detected during context /rest_3 start, will stop it
16:28:05,938 INFO  [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/rest_3]] (ServerService Thread Pool -- 47) Closing Spring root WebApplicationContext
16:28:05,938 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 47) MSC000001: Failed to start service jboss.web.deployment.default-host./rest_3: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./rest_3: org.jboss.msc.service.StartException in anonymous service: JBAS018040: Falló iniciar contexto
    at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:96)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_79]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_79]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: org.jboss.msc.service.StartException in anonymous service: JBAS018040: Falló iniciar contexto
    at org.jboss.as.web.deployment.WebDeploymentService.doStart(WebDeploymentService.java:161)
    at org.jboss.as.web.deployment.WebDeploymentService.access$000(WebDeploymentService.java:60)
    at org.jboss.as.web.deployment.WebDeploymentService$1.run(WebDeploymentService.java:93)
    ... 6 more

【问题讨论】:

  • 您是在第一次调用 REST 服务时收到此错误还是仅在下次调用时收到此错误?
  • 它显示我启动 JBoss 并部署服务的每一刻。
  • 是什么让您认为该表不存在?异常非常清楚地指出:“表/视图 'LOCATION' 已存在于模式 'APP' 中。”您只需要创建一次表;之后,该表将一直存在,直到您“DROP TABLE”或销毁整个数据库。
  • 我已经尝试过“删除表位置”,但它还显示一个错误,说它不能被删除,因为它不存在。

标签: java sql spring rest derby


【解决方案1】:

来自setCreateDatabase() 的 Javadoc(强调我的):

参数:
create - 如果设置为字符串“create”,此数据源将尝试创建一个名为 databaseName 的新数据库,如果已存在同名数据库,则启动该数据库

因此,在您第一次运行代码时,会创建数据库并创建表。第二次没有重新创建数据库,create table 失败,因为它已经存在。

在 DAO 的构造函数中创建数据库和表真的很糟糕。如果您真的必须这样做,请确保在尝试创建数据库之前删除它。如果这对您的设计不起作用,那么您刚刚发现为什么在构造函数中创建数据库是一个坏主意。

【讨论】:

  • 德比是否有可能出现错误?我的意思是,我创建了一个新的数据库,但仍然没有工作。那不可能,也许该表存在于第一个数据库中,但我创建了另一个数据库,但我得到了同样的错误。另外,我找不到这个嵌入式 derby 保存数据库的位置,所以我还不能删除它。在 Derby 中,没有 drop database 命令,因此必须将其从 OS 文件系统中删除。
  • 我认为您的问题的核心是您不了解 Derby 将数据库保存在何处。它将保存在与您的数据库名称同名的文件夹中,通常在您的应用程序运行时在“当前工作目录”中,这意味着它可能位于 JBoss 文件夹树的某个地方。尝试在硬盘上搜索名为“derbyDB”的文件夹。
  • 谢谢。我找到了数据库文件。它们位于 C:\Program Files\jboss-eap-6.2-blank\bin 下。我想如果我全部删除它们,我可以创建一个没有错误的表位置的新数据库。但还没试过。
  • 这些都没有改变这样一个事实,即这是一个脆弱的设计,并且将主要的外部副作用放在构造函数中确实是糟糕的代码气味。如果可能的话,我建议重新考虑这一点。
【解决方案2】:

我刚刚删除了这一行,现在可以正常使用了。

statement.execute("create table location(id int, country varchar(40))");

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2020-10-16
    • 2011-08-08
    相关资源
    最近更新 更多