我面临的问题如下。我从用户那里获得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();
}
}
}
感谢所有帮助解决这个问题的人,并帮助指出我的错误。
答案 0 :(得分:1)
两件事:
您的循环变量计算得不够:
for(int i = 0; i
应该是
for(int i=0; i<device.size(); i++){
被召唤3次。
这就是你所拥有的:
if(j%1000==0||j==device.size()){
prst.executeBatch();
}
j++;
这将...
将其更改为:
++j;
if(j%1000==0||j==device.size()){
prst.executeBatch();
}
然后它应该工作