【问题标题】:Using same ResultSet for every row inside JSONArray对 JSONArray 中的每一行使用相同的 ResultSet
【发布时间】:2014-04-26 16:05:42
【问题描述】:

我有一个将数据保存在数据库 (MySQL) 中的 java 应用程序,我使用 JSON 以适当的形式传输数据。我可以获取数据并将其插入到JSONArray 中,但是每当ResultSet 游标到达第一行的最后一列时,执行就会结束。而我的表中有两行,SQL查询执行成功。

我尝试通过使用许多循环、条件等来解决此问题,但这些循环中的 Resultset 要么返回 NullPointer 要么 SQLSyntaxError。我从来没有成功,所以如果你能回答我的问题,我将不胜感激。


The original java class without the loops

public class JsonSuccessReport {

public JsonSuccessReport() {
}

private Connection connection;
private Statement statement;

public void GenerateSuccessReportAsJson(String idNumber) throws SQLException
{
    String query = "SELECT USERS.idnumber, SUCCESS_REPORT.subject_name, "
            + "SUCCESS_REPORT.hours, SUCCESS_REPORT.midterm, "
            + "SUCCESS_REPORT.`final`, SUCCESS_REPORT.average, "
            + "SUCCESS_REPORT.attandance, SUCCESS_REPORT.semester, "
            + "SUCCESS_REPORT.academic_year "
            + "FROM USERS "
            + "INNER JOIN SUCCESS_REPORT "
            + "ON USERS.iduser=SUCCESS_REPORT.`USERS_iduser` "
            + "WHERE USERS.idnumber=" + idNumber;

    ResultSet rs = null;

    try {
        connection = ConnectionFactory.getConnection();
        statement = connection.createStatement();

        rs = statement.executeQuery(query);

        JsonObject jsonResponse = new JsonObject();
        JsonArray data = new JsonArray();


        if (rs.next()) {
            JsonArray row = new JsonArray();
            row.add(new JsonPrimitive(rs.getString("subject_name")));
            row.add(new JsonPrimitive(rs.getString("hours")));
            row.add(new JsonPrimitive(rs.getString("midterm")));
            row.add(new JsonPrimitive(rs.getString("final")));
            row.add(new JsonPrimitive(rs.getString("average")));
            row.add(new JsonPrimitive(rs.getString("attandance")));
            row.add(new JsonPrimitive(rs.getString("semester")));
            row.add(new JsonPrimitive(rs.getString("academic_year")));
            data.add(row);
        }

        jsonResponse.add("jsonSuccessReport", data);
        System.out.println(data);

    } finally {
        ConnectionUtility.close(rs);
        ConnectionUtility.close(statement);
        ConnectionUtility.close(connection);
    }}}

GenerateSuccessReportAsJson("09010102234");

[["Information Technologies","3","0","0","0","0","spring","2013-2014"]]

The original SQL syntax and its result

SELECT USERS.idnumber, SUCCESS_REPORT.subject_name, 
       SUCCESS_REPORT.hours, SUCCESS_REPORT.midterm, 
       SUCCESS_REPORT.`final`, SUCCESS_REPORT.average, 
       SUCCESS_REPORT.attandance, SUCCESS_REPORT.semester, 
       SUCCESS_REPORT.academic_year
FROM USERS INNER JOIN SUCCESS_REPORT ON USERS.iduser=SUCCESS_REPORT.`USERS_iduser` WHERE USERS.idnumber=09010102234;

执行的查询

+-------------+--------------------------+-------+---------+-------+---------+------------+----------+---------------+
| idnumber    | subject_name             | hours | midterm | final | average | attandance | semester | academic_year |
+-------------+--------------------------+-------+---------+-------+---------+------------+----------+---------------+
| 09010102234 | Information Technologies |     3 |       0 | 0     |       0 |          0 | spring   | 2013-2014     |
| 09010102234 | Conflict Management      |     3 |       0 | 0     |       0 |          0 | spring   | 2013-2014     |
+-------------+--------------------------+-------+---------+-------+---------+------------+----------+---------------+
2 rows in set (0.00 sec)

What I want to see in result

[["Information Technologies","3","0","0","0","0","spring","2013-2014"],["","3","0","0","0","0","spring","2013-2014"]]

【问题讨论】:

    标签: java mysql sql json resultset


    【解决方案1】:

    尝试改变

    if (rs.next())
    

    到

    while (rs.next())
    

    next() 移动结果集游标并在新行有效时返回true。查看文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2020-02-09
      • 2013-06-16
      相关资源
      最近更新 更多