2011-09-22 177 views
1

我有以下片段循环通过JSON数组并将数据插入数据库。我的问题是它没有插入所有的记录。如果我有6条记录,它只会插入5条6.如果我有5条记录,它只会插入4条记录?当我调试storesArray.length它显示数组中的总记录为6.我做错了,它不会循环并插入数组中的所有记录?JSON数组循环插入到Android SQLite数据库

这里是一个的来自服务器的SQL字符串:

[{"id":"29","cId":"3","sName":"Milford Plaza Hotel","sNumber":"3061","sCustNm":"VS7997","sSalesman":"1234","sAddress":"","sContact":"","sPhone":""},{"id":"26","cId":"7","sName":"Circle K Bowling Green","sNumber":"5670","sCustNm":"VS7976","sSalesman":"1234","sAddress":"1091 N Main Street\r\nBowling Green, Ohio 43402","sContact":"","sPhone":""},{"id":"25","cId":"7","sName":"Circle K Bowling Green","sNumber":"5669","sCustNm":"VS7975","sSalesman":"1234","sAddress":"966 S Main Street\r\nBowling Green, OH 43402","sContact":"","sPhone":""},{"id":"22","cId":"6","sName":"Rock Branch Exxon","sNumber":"122","sCustNm":"VS7983","sSalesman":"1234","sAddress":"Rt 1 Box 34 A\r\nPoca, W.V.","sContact":"","sPhone":""},{"id":"23","cId":"6","sName":"Marathon Food Mart","sNumber":"156","sCustNm":"VS7984","sSalesman":"1234","sAddress":"2300 Pike Street\r\nParkerburg, W.V.","sContact":"Jenny","sPhone":""},{"id":"27","cId":"7","sName":"Circle K Dayton","sNumber":"5346","sCustNm":"VS7992","sSalesman":"1234","sAddress":"816 Waterveilt Ave\r\nDayton, OH 45420","sContact":"","sPhone":""}] 

JSONArray storesArray =新JSONArray(restults);

 for(int i = 0; i < storesArray.length(); i++){ 

      JSONObject store = storesArray.getJSONObject(i); 

      db.execSQL("INSERT INTO stores (sId, cId, sName, sAddress, sNumber, sSalesman, sCustNum, sPhone) " + 
         "VALUES ('"+store.getString("id")+"', '"+store.getString("cId")+"', '"+store.getString("sName")+"', '"+store.getString("sAddress")+"', '"+store.getString("sNumber")+"', '"+store.getString("sSalesman")+"', '"+store.getString("sCustNm")+"', '"+store.getString("sPhone")+"')"); 

     } 
+0

也请发布ypu传递给'execSQL'的sql代码 – Caner

+0

我已经将它添加到上面的代码片段中。 –

回答

0

我猜store.getString("id")应该是您的主要列ID?你不应该在插入查询中定义,数据库会为你做。

更重要的是:不要把字符串直接在查询,因为这是摧毁你的查询一个伟大的方式(称为SQL注入)

做这样的事情:

db.execSQL("INSERT INTO stores (sId, cId, sName, sAddress, sNumber, sSalesman, sCustNum, sPhone) " + 
    "VALUES (?, ?, ?, ?, ?, ?, ?)", 
    new Object [] { 
     store.getString("cId"), 
     store.getString("sName"), 
     store.getString("sAddress"), 
     store.getString("sNumber"), 
     store.getString("sSalesman"), 
     store.getString("sCustNm"), 
     store.getString("sPhone")}); 
+0

store.getString(“id”)不是我的主ID。它用于参考。它涉及在SQLite数据库中创建的新表中的sId。但是,我将使用您的解决方案将数据插入数据库。感谢那。对我原来的问题的任何帮助将是伟大的。 –