【问题标题】:java.sql.SQLSyntaxErrorException: Table/View 'x' does not existjava.sql.SQLSyntaxErrorException:表/视图“x”不存在
【发布时间】:2015-05-24 22:40:24
【问题描述】:

我正在尝试在带有 GlassFish 4.1 的 NetBeans 8.0.2 IDE 中运行名为 AddressBook(带有 Facelets 的 JSF)的 Web 应用程序,该应用程序通过托管 bean 中的以下代码访问关系数据库:

@Resource( name="jdbc/addressbook" )
DataSource dataSource;

当我运行应用程序时,我在浏览器中收到以下错误:

java.sql.SQLSyntaxErrorException: Table/View 'ADDRESSES' does not exist
    at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
    at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source)
    at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:586)
    at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareCachedStatement(ConnectionWrapper40.java:255)
    at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareCachedStatement(ConnectionWrapper40.java:52)
    at com.sun.gjc.spi.ManagedConnectionImpl.prepareCachedStatement(ManagedConnectionImpl.java:992)
    at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareStatement(ConnectionWrapper40.java:173)
    at addressbook.AddressBean.getAddresses(AddressBean.java:157)

AddressBean.java 第 157 行是:

PreparedStatement getAddresses = connection.prepareStatement(
            "SELECT FIRSTNAME, LASTNAME, STREET, CITY, STATE, ZIP " +
            "FROM ADDRESSES ORDER BY LASTNAME, FIRSTNAME" );

包含 ADDRESSES 表的地址簿数据库是通过以下步骤创建的:

  1. 创建连接池

    1. 右键单击 GlassFish 服务器并选择查看域管理控制台
    2. 在 GlassFish 网页的“常见任务”左栏中单击
    3. JDBC 连接池
    4. 单击新建按钮并添加以下条目:
      • 名称的AddressBookPool
      • 资源类型的 javax.sql.DataSource
      • 用于数据库供应商的 JavaDB
    5. 单击下一步并滚动到其他属性并设置以下内容 字段:
      • 属性:;create=true
      • 数据库名:通讯录
      • 密码:APP
      • 点击完成
  2. 创建数据源名称

    1. 在 GlassFish 网页的“常见任务”左栏中单击
      JDBC 资源
    2. 单击新建按钮并指定 JDBC/地址簿作为 JNDI 名称
    3. 选择 AddressBookPool 作为池名称

当我返回到 NetBeans 服务选项卡时,地址簿已在 Java DB 下创建。

我成功连接数据库:jdbc:derby://localhost:1527/addressbook [APP on APP] 并让APP成为默认架构

我在 NetBeans 中打开一个文件:addressbook.sql,其中包含用于填充地址簿的 SQL。我在上面的连接上运行它并创建了 ADDRESSES 表,我可以查看数据。

AddressBook 属性具有 Java DB Driver 作为库。

【问题讨论】:

  • java.sql.SQLSyntaxErrorException: Table/View 'ADDRESSES' does not exist。这个问题纯粹只与基本的 JDBC 有关。与 JSF、GlassFish 和 NetBeans 无关。
  • 查看 Derby 中“表不存在”的这些常见原因:stackoverflow.com/questions/22996818/…

标签: java jdbc derby


【解决方案1】:

确保您的 web.xml 文件(在 Configuration Files 文件夹中)具有资源引用。示例:

    <resource-ref>
        <res-ref-name>jdbc/db1</res-ref-name>
        <res-type>javax.sql.ConnectionPoolDataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>

其中 db1 是您的 jdbc 资源名称。还要确保该值具有正确的资源类型,即示例中的连接池数据源。

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 2016-08-18
    • 2016-08-23
    • 2016-09-17
    • 2017-12-09
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多