gpt4 book ai didi

Java org.json JDBC 仅来自数据库的最后一个表行

转载 作者:行者123 更新时间:2023-12-01 19:44:02 25 4
gpt4 key购买 nike

我有一个 RESTful 应用程序,它连接到 MySQL 数据库(此处为原始粘贴: https://pastebin.com/raw/3fBp3j0B )并以 JSON 格式打印表数据。

如果我 System.out.println() 来自 ResultSet 的一些数据,所有内容都会正确显示,但使用 JSON API 只会打印表中的最后一行出来,两次。

import java.sql.*;
import javax.json.*;

public class Tietokanta {

protected Connection yhteys = null;
protected Statement kysely = null;
protected ResultSet tulosjoukko = null;

public boolean avaaYhteys() {
boolean ok = true;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
yhteys = DriverManager.getConnection("jdbc:mysql://localhost/savukelaskuri?serverTimezone=UTC", "root", "");
} catch (Exception e) {
e.printStackTrace();
ok = false;
}
return ok;
}

public boolean suljeYhteys() {
boolean ok = true;
try {
this.yhteys.close();
} catch (Exception e) {
ok = false;
}
return ok;
}
}

...

import java.math.BigDecimal;
import javax.json.Json;
import javax.json.JsonArray;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import static javax.ws.rs.client.Entity.json;
import javax.ws.rs.core.MediaType;
import org.json.JSONArray;
import org.json.JSONObject;

@Path("savukkeet")
public class ApiResource extends Tietokanta {
JSONObject jsonolio = new JSONObject();
JSONArray jsontaulu = new JSONArray();

@Context
private UriInfo context;

public ApiResource() {
this.avaaYhteys();
}

@GET
@Produces(MediaType.APPLICATION_JSON)
public String getJson() {
try {
kysely = yhteys.createStatement();
String sql = "SELECT * FROM kulutus";
tulosjoukko = kysely.executeQuery(sql);

while (tulosjoukko.next()) {
System.out.println(tulosjoukko.getString("pvm"));

jsonolio.put("id", tulosjoukko.getInt("id"));
jsonolio.put("pvm", tulosjoukko.getString("pvm"));
jsonolio.put("kulutus", tulosjoukko.getInt("kulutus"));
jsontaulu.put(jsonolio);

}
} catch (Exception e) {
e.printStackTrace();
}
return jsontaulu.toString(4);
}
}

我预计结果是

[
{
"kulutus": 9,
"pvm": "2019-01-14 16:46:00",
"id": 1
},
{
"kulutus": 8,
"pvm": "2019-01-15 21:18:00",
"id": 2
}
]

但我得到了这个

[
{
"kulutus": 8,
"pvm": "2019-01-15 21:18:00",
"id": 2
},
{
"kulutus": 8,
"pvm": "2019-01-15 21:18:00",
"id": 2
}
]

最佳答案

如果您为 while 循环中的每次迭代创建一个新的 JSONObject ,它应该可以工作:

while (tulosjoukko.next()) {
System.out.println(tulosjoukko.getString("pvm"));

jsonolio = new JSONObject();
jsonolio.put("id", tulosjoukko.getInt("id"));
jsonolio.put("pvm", tulosjoukko.getString("pvm"));
jsonolio.put("kulutus", tulosjoukko.getInt("kulutus"));
jsontaulu.put(jsonolio);

}

Java 是按引用传递的,因此当您将属性放入 jsonolio 时,即使在 JSONArray 内,它也会覆盖以前的值,因为它仍然是同一个对象

关于Java org.json JDBC 仅来自数据库的最后一个表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54206400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com