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

Android 如何确保数据只在SQLite中插入一次?,android,performance,sqlite,insert,android-sqlite,Android,Performance,Sqlite,Insert,Android Sqlite,我的项目要求学生从主服务器(MySQL数据库)检索一个类例程(时间表)到他们的android设备(SQLite) ->学生在第一次运行应用程序时,需要从服务器获取例行程序,并在Android设备上加载,然后在例行程序/课程时间表更新时获取更新。他们应该能够在脱机模式下查看例程,因此SQLite将具有与服务器上相同的数据 我已经使用PHP和JSON从数据库中检索和解析了数据。我只需要在SQLite中插入一次例程细节。因此,我是否必须在database OnCreate方法上执行数据检索、解析(从主

我的项目要求学生从主服务器(MySQL数据库)检索一个类例程(时间表)到他们的android设备(SQLite)

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

我已经使用PHP和JSON从数据库中检索和解析了数据。我只需要在SQLite中插入一次例程细节。因此,我是否必须在database OnCreate方法上执行数据检索、解析(从主服务器)和插入到SQLite,或者是否有其他更有效的方法


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

首先,在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;
    }

我使用SharedReferences只插入数据一次,只需这样使用即可:

 @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;
}

您可以为所需的列设置一个唯一的列约束,以防止列的重复条目Thank you user1283633,这正是我要找的@Segi还感谢您提供了一个简单的替代方案:)谢谢您的用户1283633,这正是我要找的D