3

我测试了我的 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;
    }
}
4

3 回答 3

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 服务器上的堆栈跟踪很可能会打印到控制台,并且应该让您更好地了解出了什么问题。

于 2013-10-28T15:55:59.777 回答
0

可能你是空的,所以在这种情况下,你传递了一个 100 sresultSet的数组。null

这就是你的NullPointerException来源。

于 2013-10-28T15:16:59.213 回答
0

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

return Arrays.copyOf(a, i);

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

于 2013-10-28T15:35:22.700 回答