SQLite不断扩展

时间:2012-06-13 02:13:16

标签: sqlite blackberry

我是黑莓开发和本网站的新手。现在,我正在开发一个从json服务中检索数据的应用程序。在我的应用程序中,我应该将数据解析到数据库中并将其保存在四个表中。我已经解析了数据,并且我成功地创建了数据库并添加了第一个和第二个表。

我现在面临的问题是,我的数据库中的第二个表不断扩展。我在sql浏览器中检查了数据库,发现每次点击应用程序图标时,它都会再次将700行添加到表中。(例如700变为1400)。

(仅限第二个表,第一个表工作得很好)。

提前谢谢

这是我的代码:

public void parseJSONResponceInBB(String jsonInStrFormat)
{
    try {
        JSONObject json = newJSONObject(jsonInStrFormat);
        JSONArray jArray = json.getJSONArray("tables");

        for (inti = 0; i < jArray.length(); i++) {
            //Iterate through json array
            JSONObject j = jArray.getJSONObject(i);
            if (j.has("Managers")) {
                add(new LabelField("Managers has been added to the database"));

                JSONArray j2 = j.getJSONArray("Managers");

                for (intk = 0; k < j2.length(); ++k) {
                    JSONObject MangersDetails = j2.getJSONObject(k);
                    if (MangersDetails.has("fName")) {
                        try {
                            URI myURI =
                                URI.create
                                ("file:///SDCard/Databases/SQLite_Guide/"
                                 + "MyTestDatabase.db");

                            d = DatabaseFactory.openOrCreate(myURI);

                            Statement st =
                                d.createStatement
                                ("CREATE TABLE Managers ( "
                                 + "fName TEXT, " +
                                 "lName TEXT, " + "ID TEXT," + "Type TEXT )");

                            st.prepare();
                            st.execute();
                            st.close();
                            d.close();
                        }
                        catch(Exception e) {
                            System.out.println(e.getMessage());
                            e.printStackTrace();
                        }

                        try {
                            URI myURI =
                                URI.create
                                ("file:///SDCard/Databases/SQLite_Guide/"
                                 + "MyTestDatabase.db");

                            d = DatabaseFactory.open(myURI);

                            Statement st =
                                d.createStatement
                                ("INSERT INTO Managers(fName, lName, ID, Type) "
                                 + "VALUES (?,?,?,?)");

                            st.prepare();

                            for (intx = 0; x < j2.length(); x++) {
                                JSONObject F = j2.getJSONObject(x);
                                //add(new LabelField ("f"));
                                st.bind(1, F.getString("fName"));
                                st.bind(2, F.getString("lName"));
                                st.bind(3, F.getString("ID"));
                                st.bind(4, F.getString("Type"));
                                st.execute();
                                st.reset();
                            }
                            d.close();
                        }
                        catch(Exception e) {
                            System.out.println(e.getMessage());
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
    catch(JSONException e) {
        e.printStackTrace();
    }
}

    //Owners method
public voidparseJSONResponceInBB1(String jsonInStrFormat)
{
    try {
        JSONObject json = newJSONObject(jsonInStrFormat);
        JSONArray jArray = json.getJSONArray("tables");

        for (inti = 0; i < jArray.length(); i++) {
            //Iterate through json array
            JSONObject j = jArray.getJSONObject(i);
            if (j.has("Owners")) {
                add(new LabelField("Owners has been added to the database"));
                JSONArray j2 = j.getJSONArray("Owners");
                for (intk = 0; k < j2.length(); ++k) {
                    JSONObject OwnersDetails = j2.getJSONObject(k);
                    if (OwnersDetails.has("fName")) {
                        try {
                            Statement st =
                                d.createStatement
                                ("CREATE TABLE Owners ( "
                                 + "fName TEXT, " +
                                 "lName TEXT, " + "ID TEXT," + "Type TEXT )");
                            st.prepare();
                            st.execute();
                            st.close();
                            d.close();
                        }
                        catch(Exception e) {
                            System.out.println(e.getMessage());
                            e.printStackTrace();
                        }

                        try {
                            Statement st =
                                d.createStatement
                                ("INSERT INTO Owners(fName, lName, ID, Type) "
                                 + "VALUES (?,?,?,?)");

                            st.prepare();
                            for (intx = 0; x < j2.length(); x++) {
                                JSONObject F = j2.getJSONObject(x);
                                //add(new LabelField ("f"));
                                st.bind(1, F.getString("fName"));
                                st.bind(2, F.getString("lName"));
                                st.bind(3, F.getString("ID"));
                                st.bind(4, F.getString("Type"));
                                st.execute();
                                st.reset();
                            }
                            d.close();
                        }
                        catch(Exception e) {
                            System.out.println(e.getMessage());
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
    catch(JSONException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:1)

这取决于你的目标是什么。如果要在每次运行json查询时替换数据库中的数据,则应添加sqlite命令以删除所有现有行,其中新获取的行通过JSON进入。

如果您只想保留某些类型的记录唯一,则应该为sqlite表添加索引。 &#39; ID&#39;专栏可能是这个的候选人。您必须进行一些实验以确保正确处理冲突 - 它可能会中止整个事务。 &#34;插入或替换&#34;在那种情况下非常有用。