数组在浏览器中给出 null 作为输出

Posted

技术标签:

【中文标题】数组在浏览器中给出 null 作为输出【英文标题】:Array gives null as output in the browser 【发布时间】:2013-11-07 10:38:52 【问题描述】:

我测试了我的 Java 程序正确地从 mysql 检索数据。但是,问题在于 Java 和 JSP 之间。 JSP 页面无法从 java 程序中检索数据。

请帮帮我。

输出为空:

null
null
.
.
.
hai

我的jsp页面:

<%@ page import="com.zoo.MySQLAccess"%>
<html>
<head>
</head>
<body>
    <%
    MySQLAccess x= new MySQLAccess();
    String[] arr =x.getRows();
    out.print("1" +arr[0]);
    %>
    <% for(String str:arr)  %>
        <div style="height: 100px">
        <% out.print(str); %>
        </div>
    <%  %>
    <h1>hai</h1>
</body>
</html>

我的java页面是:

package com.zoo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.mysql.jdbc.Driver;

public class MySQLAccess 

    public String[] getRows() 
        String[] a = new String[100];
        try 
            // Class.forName("com.mysql.jdbc.Driver");
            Connection connection = DriverManager
                    .getConnection("jdbc:mysql://localhost:3306/sankar?"
                            + "user=root&password=9788129325");
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement
                    .executeQuery("SELECT * FROM sankar.datas");

            int i = 0;

            while (resultSet.next()) 
                a[i] = resultSet.getString("name");
                i++;
            
        
        catch (Exception e) 
            e.printStackTrace();
        

        return a;
    

【问题讨论】:

日志有异常吗?请注意,如果您返回 List&lt;String&gt; 而不是数组,则可以区分失败和空结果集... Avoid using scriptlets in JSP pages. 没有例外。 o/p 就像我说的那样显示为 null null .... 【参考方案1】:

由于没有记录任何元素,因此您遇到了两个问题之一。您没有连接到您的数据库,或者您没有正确查询您的表。

检查您是否可以使用命令行 mysql 客户端以 root 身份使用密码 9788129325 连接到 localhost 上的“sankar”数据库,端口 3306。

如果可行,则在 mysql 中检查您在此 sankar 数据库中有一个“数据”表。你真的不需要“sankar.datas”。您可以只使用“从数据中选择 *”。

如果您可以查询该表,请确保它有一个“名称”列。

如果有名称列,请确保该列中至少有 1 行。

如果只有一行,请确保该行的“名称”不为空。

如果是这种情况,那么您的错误可能是您错误地加载了驱动程序。首先,您希望在您的应用程序的类路径中有mysql-connector-java-&lt;some version&gt;-bin.jar?也许在您的 webapp 的“lib”目录中?另外,我假设您注释掉的 Class.forName 在代码中的其他位置?如果没有,你需要那个。此外,您可以这样做:

Class.forName("com.mysql.jdbc.Driver").newInstance();

newInstance 是一些 Java 实现的“解决方法”。也许你的需要。

无论如何,Java 服务器上的堆栈跟踪 可能会打印到控制台,并且应该让您更好地了解出了什么问题。

【讨论】:

我已经说过,当我用一个主类java测试上面的java程序时,它正确输出了mysql数据。问题是java和jsp之间的连接。 我们看到完整的输出了吗?如果数组为空,它至少应该以“1null”开头。你得到了大约 100 行“空”行吗?【参考方案2】:

您的 resultSet 可能为空,因此在这种情况下,您将传递一个包含 100 个 nulls 的数组。

这就是您的NullPointerException 的来源。

【讨论】:

但是当我使用测试 java pgm 进行测试时。它来自数据库中的o / p ...问题是从java检索到jsp .. @user2815407 抱歉,我不明白。什么是“java pgm”,什么是“它像数据库一样来自 o/p”? 我在另一个java类中写了一个main方法。然后运行上面的方法..然后它给出了o/p,就像在mysql中一样..【参考方案3】:

您应该在返回数组之前调整其大小:

return Arrays.copyOf(a, i);

您还需要将 int i 移到 try/catch 之外。 但是创建 100 的固定(最大)大小并不是一个好主意...

【讨论】:

如果没有结果,JSP 中的 arr[0] 会产生 IndexOutOfBoundException! 但是当我使用测试 java pgm 进行测试时。它来自数据库中的o / p ...问题是从java检索到jsp .. 替换你的 e.printStackTrace();通过 throw new RuntimeException(e);,我认为你这里有问题。

以上是关于数组在浏览器中给出 null 作为输出的主要内容,如果未能解决你的问题,请参考以下文章

假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。

在保存实体 PrimaryGeneratedColumn 值未生成时,给出 NOT NULL 约束错误

字符串数组是可以保存并输出null。只不过不好动态指定长度

按对象属性排序,使用 .sort [重复] 给出混合结果

Spark - 结构值的 Hive 集成 - NULL 输出

php为啥session能在当前页面中输出值,在其他页面从session中取值的时候是NULL