【发布时间】: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 表的地址簿数据库是通过以下步骤创建的:
-
创建连接池
- 右键单击 GlassFish 服务器并选择查看域管理控制台
- 在 GlassFish 网页的“常见任务”左栏中单击
- JDBC 连接池
- 单击新建按钮并添加以下条目:
- 名称的AddressBookPool
- 资源类型的 javax.sql.DataSource
- 用于数据库供应商的 JavaDB
- 单击下一步并滚动到其他属性并设置以下内容
字段:
- 属性:;create=true
- 数据库名:通讯录
- 密码:APP
- 点击完成
-
创建数据源名称
- 在 GlassFish 网页的“常见任务”左栏中单击
JDBC 资源 - 单击新建按钮并指定 JDBC/地址簿作为 JNDI 名称
- 选择 AddressBookPool 作为池名称
- 在 GlassFish 网页的“常见任务”左栏中单击
当我返回到 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/…