我收到错误500和空指针异常

时间:2012-08-22 07:08:24

标签: java forms jsp

我正在java中进行在线考试项目。 我正面临一个问题。

在开始基础上我在我的数据库中有15个问题,我按顺序获取这些问题。 问题是,如果我尝试所有答案,我会得到结果,否则我会得到error 500NullPointerException。问题是多种选择。每个问题都有四个选项。如果我没有尝试所有问题,那么我会收到上述错误。

<%@page import="java.sql.*"%>

<%
    String st[] = new String[20];
    String ans[] = new String[20];
    int k=0;
    //int length = Integer.parseInt(request.getAttribute("length").toString());
    for (int i = 0; i < 15; i++)
    {
        int j = i + 1;
        st[i] = request.getParameter("radio" + j);
        System.out.println(st[i]);
    }
    Class.forName("oracle.jdbc.OracleDriver");
    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "root", "root");
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("Select ANS from ANSWERS order by ID");
    //String ans = "";
    int t;
    while (rs.next()) {

        ans[k] = rs.getString("ans");
        k++;
        System.out.println(ans[k]);
    }

    int count = 0;
    //String answers[] = ans.split(" ");
    for (int i = 0; i < 15; i++) {
        if (st[i].equals(ans[i])) {
            count++;
        }

    }
    out.println("Your " + count + " answers are correct");
%>

3 个答案:

答案 0 :(得分:0)

我会说你的答案根本没有随你的要求一起提交。如果问题的无线电组没有选定值,则该无线电组不会成为表单提交后您正在处理的POST请求的一部分。

这就是为什么你首先得到Null指针异常的原因。 我不能辜负你上面的例子,但我认为错误发生在你的例子末尾的比较行中:

if (st[i].equals(ans[i])) {

<强>更新
要快速解决问题,只需将评估值st[i].equals(ans[i])切换为ans[i].equals(st[i])即可。这样你总是可以对null做一个等于null并获得正确的计数。

答案 1 :(得分:0)

在代码开始时,您使用st[]初始化request.getParameter("radio" + j);这可能会为空。根据{{​​1}}的{​​{3}}:

  

以String形式返回请求参数的值,如果是,则返回null   参数不存在。

因此,当您尝试执行以下代码时:

getParameter()

for (int i = 0; i < 15; i++) { if (st[i].equals(ans[i])) { count++; } } 实际上st[i]可能是null。这可能可能是您代码中NullPointerException的原因

答案 2 :(得分:0)

你应该将你的逻辑包含在try catch中,最后处理连接的SQL异常,rs(在单独的try catch块中) 另外,尝试在堆栈跟踪上进行lloking,以确定哪一行给出空指针异常

相关问题