【问题标题】:SQLite if there is existing data skip or overwriteSQLite 如果存在现有数据跳过或覆盖
【发布时间】:2019-04-24 19:21:53
【问题描述】:

我的 sqlite 中有一些 x,y 坐标,但是当我添加新数据时,我想检查数据以及是否有相同的数据覆盖或跳过它。坐标自动来自另一个方法。

public void DBCreate(){
   SQLITEDATABASE = openOrCreateDatabase("LatLongDatabase", Context.MODE_PRIVATE, null);
   SQLITEDATABASE.execSQL("CREATE TABLE IF NOT EXISTS myTable(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, mCurrentLocationLAT VARCHAR,mCurrentLocationLONG VARCHAR);");
}

public void SubmitData2SQLiteDB(){


    SQLiteQuery = "INSERT INTO myTable (mCurrentLocationLAT, mCurrentLocationLONG) VALUES('"+mCurrentLocation.getLatitude()+"','"+mCurrentLocation.getLongitude()+"');";
    SQLITEDATABASE.execSQL(SQLiteQuery);

    Toast.makeText(CampaignActivity.this,"OK", Toast.LENGTH_LONG).show();
}

【问题讨论】:

    标签: java android sql sqlite


    【解决方案1】:

    如果表有主键,则使用 INSERT OR REPLACE,

    INSERT OR REPLACE INTO myTable (id, mCurrentLocationLAT, mCurrentLocationLONG) VALUES(1, :lat, :long)
    

    如果表没有主键,则修复它。

    【讨论】:

    • 谢谢先生。代码就是这样,你知道我在哪里可以找到关于添加主键的文档。
    • @H.P.这通常在表创建期间完成,并且 SQLite 的“ALTER TABLE”支持非常有限。您可以通过创建一个新的临时表并复制所有当前数据来解决它,然后删除原始表(这也会删除原始表中的所有内容,这就是需要备份的原因),然后创建原始表再次使用主键创建表,然后将所有数据从临时表中复制回来,然后删除临时表,但这很混乱:P 最好将主键与表一起创建......你的表现在是什么样的?
    • @hanshernik 感谢您的回复 :) 现在我的数据仅用于测试我可以创建一个新表,这不是问题。我现在才开始使用 SQLite。
    • @H.P.好吧好吧。删除表并使用 id 重新创建它,它应该看起来像 DROP TABLE IF EXISTS `myTable`; CREATE TABLE `myTable` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `mCurrentLocationLAT` REAL, `mCurrentLocationLONG` REAL); 并且 REAL 是本机 SQLite 浮点类型(它有其他精度更高的,但 REAL 是最高性能的,并且应该对地球上的经度/纬度具有足够的精度)
    • 在坐标上添加唯一索引也可以。 (或将它们用作复合主键)
    【解决方案2】:

    像这样排列代码创建了一个新表,但它现在总是覆盖。

     public void DBCreate(){
        SQLITEDATABASE = openOrCreateDatabase("LatLongDatabase", Context.MODE_PRIVATE, null);
        SQLITEDATABASE.execSQL("CREATE TABLE IF NOT EXISTS myTable43(id INTEGER PRIMARY KEY AUTOINCREMENT, FAVCurrentLocationLAT VARCHAR,FAVCurrentLocationLONG VARCHAR);");
    }
    public void SubmitData2SQLiteDB(){
        SQLiteQuery = "INSERT OR REPLACE  INTO myTable43(id, FAVCurrentLocationLAT, FAVCurrentLocationLONG) VALUES(1, '"+mCurrentLocation.getLatitude()+"','"+mCurrentLocation.getLongitude()+"');";
            SQLITEDATABASE.execSQL(SQLiteQuery);
            Toast.makeText(CampaignActivity.this,"OK", Toast.LENGTH_LONG).show();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      相关资源
      最近更新 更多