我正在運行帶有 Netbeans 12.5 的 Java 17.0.1、本地 Apache Tomcat 8.5.73 和帶有 derbyDB 的 JDBC。下面代碼中的Select陳述句不執行,表中不顯示任何行。
我的jsp檔案:
<%@ page import="java.sql.*" %>
<%
String id = request.getParameter("userid");
String driverclass = "org.apache.derby.jdbc.ClientDriver";
String connectionUrl = "jdbc:derby://localhost:1527/";
String database = "Shop";
String username = "deradmin";
String password = "admin";
try {
Class.forName(driverclass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
%>
<!DOCTYPE html>
<html>
<body>
<h1>Shopdatenbank</h1>
<h2>Kunden</h2>
<table border="1">
<thead>
<tr>
<td>Name</td>
<td>Strasse</td>
<td>Plz</td>
<td>Ort</td>
</tr>
</thead>
<%
try{
DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());
connection = DriverManager.getConnection(connectionUrl database, username, password);
statement=connection.createStatement();
String sql ="SELECT * FROM Kunde";
resultSet = statement.executeQuery(sql);
while(resultSet.next()){
%>
<tbody
<tr>
<td><%=resultSet.getString("Name") %></td>
<td><%=resultSet.getString("Strasse") %></td>
<td><%=resultSet.getString("Plz") %></td>
<td><%=resultSet.getString("Ort") %></td>
</tr>
</tbody>
<%
}
connection.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
%>
</table>
</body>
</html>
我在 Tomcat 日志中收到以下錯誤:
java.sql.SQLSyntaxErrorException: Tabelle/View 'KUNDE' ist nicht vorhanden.
at org.apache.derby.client.am.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:94)
at org.apache.derby.client.am.SqlException.getSQLException(SqlException.java:325)
at org.apache.derby.client.am.ClientStatement.executeQuery(ClientStatement.java:514)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:155)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:465)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:383)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:331)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:196)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:364)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:624)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1673)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: ERROR 42X05: Tabelle/View 'KUNDE' ist nicht vorhanden.
at org.apache.derby.client.am.ClientStatement.completeSqlca(ClientStatement.java:2116)
at org.apache.derby.client.net.NetStatementReply.parsePrepareError(NetStatementReply.java:579)
at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(NetStatementReply.java:145)
at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(NetStatementReply.java:54)
at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(StatementReply.java:41)
at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(NetStatement.java:156)
at org.apache.derby.client.am.ClientStatement.readPrepareDescribeOutput(ClientStatement.java:1702)
at org.apache.derby.client.am.ClientStatement.flowExecute(ClientStatement.java:2381)
at org.apache.derby.client.am.ClientStatement.executeQueryX(ClientStatement.java:520)
at org.apache.derby.client.am.ClientStatement.executeQuery(ClientStatement.java:505)
... 29 more
“沒有錯。” - > 表不存在
該表存在于資料庫中,我可以在 Netbeans 中毫無問題地執行查詢。該頁面也在瀏覽器中打開。
不確定代碼或我的配置是否有錯誤。
uj5u.com熱心網友回復:
首先,根據 Basil Bourque 評論進行檢查。其次,我不知道您使用的資料庫,但有些資料庫,例如PostgreSQL,在創建表后需要提交,并且表在沒有提交的情況下不會對其他連接可見。
uj5u.com熱心網友回復:
瘋狂猜測:多個模式
您尚未提供創建表的代碼。所以我們無法準確回答。但我的猜測是您不知不覺地在模式之間切換。
因此,一個架構包含您之前創建的表。然后您連接到另一個模式,但可惜在這個其他模式中找不到這樣的表。
參考
故障排除
您應該通過 JDBC 連接進行查詢,以獲取當前模式中所有表的串列。
并使用您的資料庫管理工具仔細閱讀該資料庫中所有架構的串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367009.html
