如何确保数据只在SQLite中插入一次?

时间:2013-06-17 07:00:42

标签: android performance sqlite insert android-sqlite

我的项目要求学生从主服务器(MySQL数据库)检索到他们的Android设备(SQLite)的类例程(Schedule)。

- >学生必须在第一次运行应用程序时从其Android设备上获取加载服务器的例程,然后在更新例程/课程的时间表时获取更新。他们应该能够在离线模式下查看例程,因此SQLite将具有与服务器上相同的数据。

我已经使用PHP和JSON从数据库中检索和解析了数据。我只需要在SQLite中插入例程细节一次。所以我必须在数据库OnCreate 方法上进行数据检索,解析(从主服务器)和插入到SQLite,还是有另一种方法可以更有效地进行。

很抱歉,如果这是一个愚蠢的问题,我是SQLite和Android的新手。

2 个答案:

答案 0 :(得分:4)

我使用sharedpreferences只插入一次数据,只需这样使用它:

 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 if (isFirstTime()) {
    // insert data 
 }

 }



 private boolean isFirstTime()
 {
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
boolean ranBefore = preferences.getBoolean("RanBefore", false);
if (!ranBefore) {
    // first time
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean("RanBefore", true);
    editor.commit();
}
return !ranBefore;
}

答案 1 :(得分:1)

首先,在sqlite数据库类中创建一个方法,以检查现有表是否为空。并在你的开始活动的oncreate方法上调用该方法。如果你的表是空的,那么在其中插入记录,否则不插入..

public boolean checkDBIsNull(String table) {
        Cursor cur = db.rawQuery("SELECT COUNT(*) FROM " + table + "", null);
        if (cur != null) {
            cur.moveToFirst();
            System.out.println("record : " + cur.getInt(0));
            if (cur.getInt(0) == 0) {
                System.out.println("Table is Null");
                cur.close();
                return true;
            }
            cur.close();
        } else {
            System.out.println("Cursor is Null");
            return true;
        }
        System.out.println("Table Not Null");
        return false;
    }