![](/img/trans.png)
[英]How to do you insert a JSONArray as a Geometry in MySQL from Java?
[英]How do I insert MySQL Table data into an JSONArray?
我正在尝试从MySQL表中获取一些数据,并将此数据插入JSONArray。
在我的代码下方:
public static JSONArray get_inactive_bookings(String username) {
JSONArray array = new JSONArray();
JSONObject obj = new JSONObject();
Connection conn = null;
ResultSet rs = null;
int index = 0;
int user_id = Users.get_user_id(username);
String sql = "select * from bookings where user_id =" + user_id +
" and Effettiva_Restituzione is not null";
try {
conn = Utilities.connect();
Statement st = conn.createStatement();
rs = st.executeQuery(sql);
//This is where I think problem shows up
while (rs.next()) {
obj.put("Booking_ID", rs.getInt("booking_id"));
obj.put("Book_Title", Books.get_title(rs.getInt("book_id")));
obj.put("Booking_Date", rs.getString("Data_Prenotazione"));
obj.put("Return_Date", rs.getString("Data_Restituzione"));
array.add(index, obj);
index++;
}
} catch (SQLException ecc) {
System.out.println("ERROR: " + ecc.getMessage());
} finally {
Utilities.disconnect(conn);
}
return array;
}
在我的表中,一旦执行sql查询,便有两次出现,但是在结果数组中,表中最后一次出现的次数是我的两倍。 我想这是一段时间的错。 你们知道如何在JSONArray中获得这两种情况吗? 谢谢
在第一次迭代中,首先添加键值。 但是在第一次迭代之后,您将覆盖对象中每个键的映射值。 因为,您添加同一对象多次覆盖其条目。 您必须在每次迭代中创建一个新的jsonObject。 所以
JSONObject obj =新的JSONObject();
必须在while循环中。 喜欢
public static JSONArray get_inactive_bookings(String username) {
JSONArray array = new JSONArray();
//JSONObject obj = new JSONObject(); -> this line must be in while loop
Connection conn = null;
ResultSet rs = null;
int index = 0;
int user_id = Users.get_user_id(username);
String sql = "select * from bookings where user_id =" + user_id +
" and Effettiva_Restituzione is not null";
try {
conn = Utilities.connect();
Statement st = conn.createStatement();
rs = st.executeQuery(sql);
//This is where I think problem shows up
while (rs.next()) {
JSONObject obj = new JSONObject(); // moved to here
obj.put("Booking_ID", rs.getInt("booking_id"));
obj.put("Book_Title", Books.get_title(rs.getInt("book_id")));
obj.put("Booking_Date", rs.getString("Data_Prenotazione"));
obj.put("Return_Date", rs.getString("Data_Restituzione"));
array.add(index, obj);
index++;
}
} catch (SQLException ecc) {
System.out.println("ERROR: " + ecc.getMessage());
} finally {
Utilities.disconnect(conn);
}
return array;
}
而且,您无需单独保留“索引”来指定要添加的元素的位置。 默认情况下已将其添加到数组的末尾。 因此,最好添加如下元素: array.add(obj);
如果新元素将添加到数组的末尾。
您需要将对象实例化移动到循环中,如下所示:
public static JSONArray get_inactive_bookings(String username) {
JSONArray array = new JSONArray();
Connection conn = null;
ResultSet rs = null;
int index = 0;
int user_id = Users.get_user_id(username);
String sql = "select * from bookings where user_id =" + user_id +
" and Effettiva_Restituzione is not null";
try {
conn = Utilities.connect();
Statement st = conn.createStatement();
rs = st.executeQuery(sql);
//This is where I think problem shows up
while (rs.next()) {
JSONObject obj = new JSONObject();
obj.put("Booking_ID", rs.getInt("booking_id"));
obj.put("Book_Title", Books.get_title(rs.getInt("book_id")));
obj.put("Booking_Date", rs.getString("Data_Prenotazione"));
obj.put("Return_Date", rs.getString("Data_Restituzione"));
array.add(index, obj);
index++;
}
} catch (SQLException ecc) {
System.out.println("ERROR: " + ecc.getMessage());
} finally {
Utilities.disconnect(conn);
}
return array;
}
对于要放入数组中的每个元素,您都使用相同的JSONObject(相同的引用),因此只需在一个循环中覆盖其值即可。
JSONObject obj = new JSONObject(); //put this inside your while loop
您需要在每次迭代中创建一个新对象,因为您要覆盖该对象,
while (rs.next()) {
JSONObject obj = new JSONObject();
obj.put("Booking_ID", rs.getInt("booking_id"));
obj.put("Book_Title", Books.get_title(rs.getInt("book_id")));
obj.put("Booking_Date", rs.getString("Data_Prenotazione"));
obj.put("Return_Date", rs.getString("Data_Restituzione"));
array.add(index, obj);
index++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.