java.sql.SQLSyntaxErrorException:表/视图’x’不存在
我试图在带有GlassFish 4.1的NetBeans 8.0.2 IDE中运行一个名为AddressBook
的Web应用程序(带有Facelets的JSF),它通过托管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服务器,然后选择“查看域管理控制台”
- 在左侧列的Common Tasks中的GlassFish网页中单击
- JDBC连接池
- 单击“新建”按钮并添加以下条目:
- AddressBookPool为名称
- 资源类型的javax.sql.DataSource
- 适用于数据库供应商的JavaDB
- 单击“下一步”并滚动到“其他属性”并设置以下字段:
- 属性:; create = true
- DatabaseName:地址簿
- 密码:APP
- 单击完成
-
创建数据源名称
- 在左侧列的Common Tasks中的GlassFish网页中单击
JDBC资源 - 单击New Button并将JDBC / addressbook指定为JNDI名称
- 选择AddressBookPool作为池名称
- 在左侧列的Common Tasks中的GlassFish网页中单击
当我返回NetBeans服务选项卡时,已在Java DB下创建了地址簿。
我成功连接到数据库:jdbc:derby:// localhost:1527 / addressbook [APP on APP]并使APP成为默认架构
我在NetBeans中打开一个文件:addressbook.sql,其中包含用于填充地址簿的SQL。 我在上面的连接上运行它,并创建了ADDRESSES表,我可以查看数据。
AddressBook属性将Java DB Driver作为库。
确保您的web.xml文件(在Configuration Files文件夹中)具有资源引用。 例:
jdbc/db1 javax.sql.ConnectionPoolDataSource Container Shareable
其中db1是您的jdbc资源名称。 还要确保该值具有正确的资源类型,即示例中的连接池数据源。