java.sql.SQLSyntaxErrorException: at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.dr

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32956164/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 03:02:07  来源:igfitidea点击:

java.sql.SQLSyntaxErrorException: at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) at oracle.jdbc.dr

javaeclipseoracleservletsjdbc

提问by Atul Rai

I have just start learning the jdbc with servlet and I have a table in oracle database that contain the result of students. I want to fetch the detail while searching through the roll no. my code is here

我刚刚开始用servlet学习jdbc,我在oracle数据库中有一个包含学生结果的表。我想在搜索卷号时获取详细信息。我的代码在这里

enter image description here

在此处输入图片说明

index.html

索引.html

<form action="ResultServlet">
    Enter your Rollno:<input type="text" name="roll" /><br /> <input
        type="submit" value="search" />
</form>

ResultServlet.java

结果Servlet.java

  package atulrai;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
 import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

 import javax.servlet.ServletException;
  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;

  /**
   * Servlet implementation class ResultServlet
   */
 @WebServlet("/ResultServlet")
 public class ResultServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    String rollno = request.getParameter("roll");
    int roll = Integer.valueOf(rollno);

    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection con = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:oracle12c", "AtulRai",
                "atulrai");

        PreparedStatement ps = con
                .prepareStatement("select * from result where rollno=?");
        ps.setInt(1, roll);

        out.print("<table width=50% border=1>");
        out.print("<caption>Result:</caption>");

        ResultSet rs = ps.executeQuery();

        /* Printing column names */
        ResultSetMetaData rsmd = rs.getMetaData();
        int total = rsmd.getColumnCount();
        out.print("<tr>");
        for (int i = 1; i <= total; i++) {
            out.print("<th>" + rsmd.getColumnName(i) + "</th>");
        }

        out.print("</tr>");

        /* Printing result */

        while (rs.next()) {
            out.print("<tr><td>" + rs.getInt(1) + "</td><td>"
                    + rs.getString(2) + "</td><td>" + rs.getString(3)
                    + "</td><td>" + rs.getString(4) + "</td></tr>");

        }

        out.print("</table>");

    } catch (Exception e2) {
        e2.printStackTrace();
    }

    finally {
        out.close();
    }

}

}

}

when I have entered the roll no in html form it throw some exception which is not understandable for me. Any help please

当我以 html 形式输入卷号时,它会抛出一些我无法理解的异常。请任何帮助

error here

错误在这里

 java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:774)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:925)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1111)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:4845)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1501)
at atulrai.ResultServlet.doGet(ResultServlet.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

回答by Mureinik

From the image you shared, it seems that the table was created with double quotes ("), making the name case sensitive. If this is the case, you should refer to it in that way in the selectstatement too:

从您分享的图像来看,该表似乎是用双引号 ( ")创建的,因此名称区分大小写。如果是这种情况,您也应该在select声明中以这种方式引用它:

PreparedStatement ps = 
    con.prepareStatement("select * from \"result\" where rollno=?");