【问题标题】:JSON Array Loop Inserting into Android SQLite DatabaseJSON 数组循环插入 Android SQLite 数据库
【发布时间】:2011-09-22 12:39:53
【问题描述】:

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

这是从服务器传入的 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 = new JSONArray(results);

        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")+"' )");

        }   

【问题讨论】:

  • 请将ypu传给execSQL的sql代码也贴出来
  • 我已经将它添加到上面的sn-p中了。

标签: android arrays sqlite loops


【解决方案1】:

我猜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")});

【讨论】:

  • store.getString("id") 不是我的主 ID。它用于参考。它与 SQLite 数据库中正在创建的新表中的 sId 相关。但是,我将使用您的解决方案将数据插入数据库。感谢那。对我原来的问题的任何帮助都会很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2012-05-27
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
相关资源
最近更新 更多