【问题标题】:How to make sure that data get inserted in SQLite only once?如何确保数据只插入 SQLite 一次?
【发布时间】:2013-06-17 07:00:42
【问题描述】:

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

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

我已经使用 PHP 和 JSON 从数据库中检索和解析数据。我只需要在 SQLite 中插入例程详细信息一次。所以我必须在 database OnCreate 方法上进行数据检索、解析(从主服务器)和插入到 SQLite,还是有其他更有效的方法。

对不起,如果这是一个愚蠢的问题,我是 SQLite 和 android 的新手。

【问题讨论】:

  • 您可以为所需列设置唯一列约束,以防止列重复条目

标签: android performance sqlite insert android-sqlite


【解决方案1】:

我使用 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;
}

【讨论】:

  • 谢谢 user1283633 这就是我想要的。 :D
【解决方案2】:

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

【讨论】:

  • 谢谢 user1283633 这就是我想要的。 @Segi 也感谢您提供一个简单的替代方案 :)
猜你喜欢
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
相关资源
最近更新 更多