这是我第一次在这里问而不是阅读。 我正在开发一个将数据库复制到JSON文件的JAVA软件。 我的问题是我只获得了到达数据库的最后一行的副本。
Theres my CODE
public void getData() throws IOException {
try {
String query = "select * from Productos";
rs = st.executeQuery(query);
System.out.println("Prueba de funcionamiento");
JSONObject jobj = new JSONObject();
while(rs.next()) {
String cdpt= rs.getString("Cod.RefPro");
String name= rs.getString("Nombre");
String desc = rs.getString("Descripcion");
String prec = rs.getString("PrecioNeto");
String pvp = rs.getString("pvp");
String cdp = rs.getString("CodRefProv");
String fam = rs.getString("Familia");
String exis = rs.getString("Existencias");
System.out.println(cdpt);
JSONArray list = new JSONArray();
JSONObject jobja = new JSONObject();
JSONObject jobjb = new JSONObject();
JSONObject jobjc = new JSONObject();
JSONObject jobjd = new JSONObject();
JSONObject jobje = new JSONObject();
JSONObject jobjf = new JSONObject();
JSONObject jobjg = new JSONObject();
JSONObject jobjh = new JSONObject();
jobja.put("crf", cdpt);
jobjb.put("name", name);
jobjc.put("desc", desc);
jobjd.put("pve", prec);
jobje.put("pvp", pvp);
jobjf.put("cdp", cdp);
jobjg.put("familia", fam);
jobjh.put("existencias", exis);
list.add(jobja);
list.add(jobjb);
list.add(jobjc);
list.add(jobjd);
list.add(jobje);
list.add(jobjf);
list.add(jobjg);
list.add(jobjh);
jobj.put("Productos", list);
}
// try-with-resources statement based on post comment below :)
try (FileWriter file = new FileWriter("N:\\file.json")) {
file.write(jobj.toJSONString());
file.flush();
System.out.println("Successfully Copied JSON Object to File...");
System.out.println("\nJSON Object: " + jobj);
}
}catch(Exception ex) {
System.out.println("Error: "+ex);
}
}
}
如果有人帮助我解决这个问题,我将非常感激
答案 0 :(得分:4)
Map
延伸put
。
致电debug
时,
一个元素被添加到地图中。
在你的情况下, 使用键" Productos"。
添加每个元素每次你放一个新元素, 它会覆盖之前添加的元素,因为两者的密钥相同。
答案 1 :(得分:1)
每次循环运行时,您都会以Product
键值覆盖列表。
所以只需替换
jobj.put("Productos", list);
用
jobj.put("Productos"+i++, list);
并在循环外定义i。
替换之后。你的代码就是这样的
public void getData() throws IOException {
try {
String query = "select * from Productos";
rs = st.executeQuery(query);
System.out.println("Prueba de funcionamiento");
JSONObject jobj = new JSONObject();
String cdpt="",name="",desc="",precm="",pvp="",cdp="",fam="",exis="";
JSONArray list = new JSONArray();
JSONObject[7] jobj=new JSONObject();
int i=0;
while(rs.next()) {
cdpt= rs.getString("Cod.RefPro");
name= rs.getString("Nombre");
desc = rs.getString("Descripcion");
prec = rs.getString("PrecioNeto");
pvp = rs.getString("pvp");
cdp = rs.getString("CodRefProv");
fam = rs.getString("Familia");
exis = rs.getString("Existencias");
// System.out.println(cdpt);
for (int i=0; i<=jobj.length; i++)
jopv[i]=new JSONObject();
jobj[0].put("crf", cdpt);
jobj[1].put("name", name);
jobj[2].put("desc", desc);
jobj[3].put("pve", prec);
jobj[4].put("pvp", pvp);
jobj[5].put("cdp", cdp);
jobj[6].put("familia", fam);
jobj[7].put("existencias", exis);
for(int i=0; i<=jobj.lenght; j++)
list.add(jobj[i]);
jobj.put("Productos"+i++, list);
}
// try-with-resources statement based on post comment below :)
try (FileWriter file = new FileWriter("N:\\file.json")) {
file.write(jobj.toJSONString());
file.flush();
System.out.println("Successfully Copied JSON Object to File...");
System.out.println("\nJSON Object: " + jobj);
}
}catch(Exception ex) {
System.out.println("Error: "+ex);
}
}
希望这个有用。
答案 2 :(得分:0)
jobj是一张地图
jobj.put("Productos", list);
使用此行,您只使用键“Productos”将最后一个列表放入jobj。
我认为你需要一份jobj的清单