我测试了我的Java程序正确地从MySQL检索数据。但是,问题出在Java和JSP之间。 JSP页面无法从java程序中检索数据。
请帮帮我们。
它将输出显示为null:
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;
}
}
答案 0 :(得分:1)
由于没有记录任何元素,因此您有两个问题之一。您没有连接到您的数据库,或者您没有正确查询您的表。
检查您是否可以使用命令行mysql客户端以root身份使用密码9788129325连接到localhost,端口3306上的“sankar”数据库。
如果可行,那么在mysql中检查你在这个sankar数据库中有一个“datas”表。你真的不需要“sankar.datas”。您可以“选择*来自数据”。
如果您可以查询该表,请确保它具有“名称”列。
如果它有名称列,请确保此列中至少有一行。
如果它有一行,请确保该行的“名称”不为空。
如果是这种情况,那么您的错误可能是您错误地加载了驱动程序。首先,您希望在应用程序的类路径中有mysql-connector-java-<some version>-bin.jar
?也许在你的webapp的“lib”目录中?另外,我假设你注释掉的Class.forName是代码中的其他地方?如果没有,你需要那个。此外,您可以这样做:
Class.forName("com.mysql.jdbc.Driver").newInstance();
newInstance是一些Java实现的“解决方法”。也许你的需要。
无论如何,Java服务器上的堆栈跟踪 可能会打印到控制台,并且可以让您更好地了解出现了什么问题。
答案 1 :(得分:0)
可能您的resultSet
为空,因此在这种情况下,您传递的数组为100 null
。
这就是NullPointerException
来自的地方。
答案 2 :(得分:0)
您应该在返回之前调整数组大小:
return Arrays.copyOf(a, i);
你还需要将你的int i移到try / catch之外。 但是创建一个100的固定(最大)大小并不是一个好主意......