java - SQLite 如果数据库中存在输入则跳过或覆盖现有的

标签 java android sql sqlite

我对作业有疑问。我的 android 应用程序中有一个带有 sqlite 的数据库,位置更新来了并写入了 sql db,但是即将到来的更新有一些相同的数据。我想检查我的数据库中是否有相同的位置,系统会跳过或覆盖数据库中现有的位置信息作为 x,y 我有一些代码我在下面发布但如果我将其更改为更新,我的代码总是添加或总是覆盖替换或类似的东西我的数据库中也有 id。

如何更改和组织我的工作代码?

public void DBCreate(){
    SQLITEDATABASE = openOrCreateDatabase("LatLongDatabase3", Context.MODE_PRIVATE, null);
    SQLITEDATABASE.execSQL("CREATE TABLE IF NOT EXISTS myTable74(id INTEGER PRIMARY KEY AUTOINCREMENT, FAVCurrentLocationLAT VARCHAR,FAVCurrentLocationLONG VARCHAR);");
}

public void SubmitData2SQLiteDB(){
    SQLiteQuery = "INSERT OR REPLACE INTO myTable74(id, FAVCurrentLocationLAT, FAVCurrentLocationLONG) VALUES(NULL,'"+mCurrentLocation.getLatitude()+"','"+mCurrentLocation.getLongitude()+"');";
    SQLITEDATABASE.execSQL(SQLiteQuery);
    Toast.makeText(CampaignActivity.this,"OK", Toast.LENGTH_LONG).show();
}

最佳答案

您没有按应有的方式使用INSERT OR REPLACE
INSERT OR REPLACE 或简单的 REPLACE 所做的是:
在插入新行之前检查该行是否违反约束并且
-如果确实违反约束,它会删除现有行,然后插入新行
-if 它不违反约束,然后继续并插入新行
在您的表中,唯一存在的约束是:

id INTEGER PRIMARY KEY

除此之外别无其他。
这意味着无论何时您尝试插入新行:
-如果新的id已经存在在表中,那么这个现有的行将被删除,新的行将被插入
- 如果新的 id 不存在 则将插入新行。

这是你想要的吗?
我想你想要的是对 2 列 (FAVCurrentLocationLAT,FAVCurrentLocationLONG) 的唯一性的约束,它应该是表中的 PRIMARY KEY,因为我不认为id 是必需的(或者它可能是必需的,但它不是插入失败的原因)。
因此,将表的 CREATE 语句更改为:

CREATE TABLE myTable74 (
  FAVCurrentLocationLAT TEXT, 
  FAVCurrentLocationLONG TEXT, 
  PRIMARY KEY(FAVCurrentLocationLAT,FAVCurrentLocationLONG)
);

现在每次执行语句时:

SQLiteQuery = 
  "INSERT OR REPLACE INTO myTable74(FAVCurrentLocationLAT, FAVCurrentLocationLONG) " +
  "VALUES('"+mCurrentLocation.getLatitude()+"','"+mCurrentLocation.getLongitude()+"');";

将插入新的值对并替换现有值。
当然不需要替换,所以你可以通过代码检查表中是否已经存在值,如果它们不执行 INSERT(而不是 REPLACE) 语句。

关于java - SQLite 如果数据库中存在输入则跳过或覆盖现有的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871387/

相关文章:

java - 我应该在基于有限状态机的框架的测试中包括什么

java - 匹配括号的正则表达式

java - 图表引擎,图表内嵌另一个图表

java - 电池状态总是不充电

sql - Postgresql 顺序扫描在 5 亿行上性能下降

JAVA SQL 将所有通配符分配为 null

java - 为什么我的 JApplet 最初显示为白色?

android - 为每个应用程序安装生成唯一的加密 key 或盐

java - Android - 卸载应用程序时未删除 Sqlite 数据库文件?

sql - PowerShell 变量分配随机失败