【问题标题】:Java, getting data from a Derby database and converting each row into a Json objectJava,从 Derby 数据库中获取数据并将每一行转换为 Json 对象
【发布时间】:2019-08-03 23:51:26
【问题描述】:

我正在修改 Java 和 Derby 数据库,并编写了代码以从 derby 数据库(netbeans 集成数据库)中获取所有行并从中创建一个 JSON 对象。

try {
      PreparedStatement statement = this.con.prepareStatement("SELECT * FROM PURCHASEORDERS");
      ResultSet result = statement.executeQuery();
      JSONObject objectJson = new JSONObject();
      while(result.next()){
      for (int x=1;x<(result.getMetaData().getColumnCount())+1;x++)
      {
          if(result.getMetaData().getColumnType(x)==java.sql.Types.INTEGER)
          {objectJson.put(result.getMetaData().getColumnName(x), result.getInt(x));}
          if(result.getMetaData().getColumnType(x)== java.sql.Types.VARCHAR)
          {objectJson.put(result.getMetaData().getColumnName(x), result.getString(x));}
          if(result.getMetaData().getColumnType(x)== java.sql.Types.BOOLEAN)
          {objectJson.put(result.getMetaData().getColumnName(x), result.getBoolean(x));}
      }
      }
      System.out.println(objectJson);

输出是这样的

{"STATUS":"ordered","DEPARTMENTCODE":"Enterfake","COMPLETEDSTATUS":true,"PURCHASEID":4,"DELIVERYATTENTION":"fake"}

这是数据库的最后一行。我的问题是为什么它只给我最后一行?我怎样才能让它给我所有的行? 有什么想法吗?

【问题讨论】:

  • 在循环的每次迭代中创建一个新的 JsonObject,并将其添加到 Listdocs.oracle.com/javase/tutorial/collections
  • 我不熟悉我尝试过的列表 List list = new JSONObject();在循环结束时,我添加了这个位 list.add(objectJson);这就是我得到的 [{"purchaseid":1},{"departmentcode":"Enter"},{"status":"ordered"},............ 它创建了一个新对象为每个列元素创建一个列表。除了所有元素之外,还有什么其他方法可以像我在上面展示的那样吗?

标签: java json jdbc derby


【解决方案1】:

如果您将一个对象放入具有相同键的 JSONObject,那么具有该键的先前值将被覆盖,而不是添加(因为 JSON 对象不能有多个具有相同名称的键)。

要使其正常工作,请创建一个列表,然后将该列表添加到您的 JSONObject

【讨论】:

  • 我这样做了,它给了我一个单独的对象列表,例如:[{"purchaseid":1}, {"departmentcode":"Enter"}, {"status":"ordered"} , {"deliveryattention":"Enter"}, {"completedstatus":true}, {"purchaseid":2}, {"departmentcode":"Enter"}, {"status":"ordered"}, {"deliveryattention ":"Enter"}, {"completedstatus":true}, {"purchaseid":4}, {"departmentcode":"Enterfake"}, {"status":"ordered"}, {"deliveryattention":"fake "}, {"completedstatus":true}] 我需要它,例如 {"STATUS":"ordered","DEPARTMENTCODE":"Enterfake","COMPLETEDSTATUS":true,"PURCHASEID":4,"DELIVERYATTENTION":"fake "} 还有其他想法吗?
  • 在循环之前创建一个 JSONObject 列表,例如 List objects = new ArrayList();然后在循环中,创建一个新的 JSONObject 实例 JSONObject singleObject = new JSONObject (就像你之前所做的那样)。在循环结束时,将 singleObject 添加到 JSONObject 列表。 objects.add(singleObject);
猜你喜欢
  • 2014-06-12
  • 2010-12-13
  • 2020-10-03
  • 1970-01-01
  • 2017-09-20
  • 2016-01-28
  • 2012-09-13
  • 1970-01-01
相关资源
最近更新 更多