数组在浏览器中给出 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<String>
而不是数组,则可以区分失败和空结果集...
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-<some version>-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 个 null
s 的数组。
这就是您的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 约束错误