【发布时间】:2017-10-29 22:54:01
【问题描述】:
我面临以下问题。我从用户那里获得 JSON 输入,其中包含多个嵌套数组并存储到 MySQL 数据库中。问题就像我在下面的 JSON 输入中拥有 device_id 2、3 和 4 的数据,但是在使用 POST 方法在 POSTMan 中执行 JSON 后,我只能存储 device_id 2、3 和 4 的数据无法保存到数据库。我尝试了其他数量的数据,它发生了同样的情况。
JSON 输入:
{
"app_id":"1",
"token":"1",
"device":
[
{
"device_id":"2",
"setting_id":"2",
"batch_id":"2",
"time":"2017-02-07 16:00:00",
"power":"2"
},
{
"device_id":"3",
"setting_id":"3",
"batch_id":"3",
"time":"2017-02-07 15:00:00",
"power":"3"
},
{
"device_id":"4",
"setting_id":"4",
"batch_id":"4",
"time":"2017-02-07 14:00:00",
"power":"4"
}
]
}
数据库代码:
public void setSPowerCons(String app_id, String token, ArrayList<PowerConsA> device){
Connection conn = null;
PreparedStatement prst = null;
try{
//Register JDBC driver
Class.forName(JDBC_DRIVER);
//Open a connection
conn = DriverManager.getConnection(DB_URL);
String SQL = "INSERT INTO powerConsumption"
+ "(app_id, token, device_id, setting_id, batch_id, time, power)"
+ "VALUES(?, ?, ?, ?, ?, ?, ?)";
prst = conn.prepareStatement(SQL);
//Bind VALUES into parameters
int j=0;
prst.setString(1, app_id);
prst.setString(2, token);
for(PowerConsA powerconsa : device){
for(int i=0; i<device.size()-1; i++){
prst.setString(3, device.get(i).getDevice_id());
prst.setString(4, device.get(i).getSetting_id());
prst.setString(5, device.get(i).getBatch_id());
prst.setString(6, device.get(i).getTime());
prst.setString(7, device.get(i).getPower());
prst.addBatch();
}
if(j%1000==0||j==device.size()){
prst.executeBatch();
}
j++;
}
prst.close();
conn.close();
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
if(prst != null){
prst.close();
}
}
catch(SQLException sqle){
sqle.printStackTrace();
}
try{
if(conn != null){
conn.close();
}
}
catch(SQLException sqle1){
sqle1.printStackTrace();
}
}
}
感谢所有帮助这个问题并帮助指出我的错误的人。
【问题讨论】:
-
应该是
for(int i=0; i<device.size(); i++)如果device.size()=3,这将运行循环3次。对于相同的情况,您的循环仅运行代码 2 次。 -
嗨。 @Riya您的评论确实有助于解决我的问题。谢谢。