【问题标题】:Raw Query in Android SQLite - INSERT OR IGNOREAndroid SQLite 中的原始查询 - 插入或忽略
【发布时间】:2013-05-23 04:03:55
【问题描述】:

我在将信息输入到我正在创建的应用程序的 Sqlite 数据库中时遇到问题。我之前使用过光标的帮助。我已经习惯了 MySQL,虽然显然没有那么“习惯”。

我正在尝试从文件添加到数据库。我以前有这个工作,但它会与光标一起添加。然后我被告知,为了做到这一点,我可以将新信息添加到文件中,并让应用程序仅将新信息添加到数据库中,我应该使用 INSERT 或 IGNORE。

这是正确的语法吗?无论出于何种原因,我目前都没有插入任何信息...

ourDatabase.rawQuery("INSERT OR IGNORE INTO " + DATABASE_TABLE + " ("+KEY_CLASS+",
 " + KEY_QUESTION+ ") VALUES ('" + qclass + "', '" + question + "');", null);

这是我的数据库:

"CREATE TABLE " + DATABASE_TABLE + " (" + 
                    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                    KEY_CLASS + " TEXT NOT NULL, " +
                    KEY_QUESTION + " TEXT NOT NULL UNIQUE);

提前感谢您的帮助!

【问题讨论】:

  • 删除查询中的分号“');”
  • 感谢您的回复。不幸的是,这并没有奏效。我发布了我的数据库只是为了确保我做事正确......谢谢!
  • 看:link
  • 这是我基于 Markus 的查询,但它仍然无法正常工作。不过感谢您的链接。

标签: java android sqlite insert


【解决方案1】:

您的查询似乎是正确的,但还是试试下面的一个

ContentValues insertValues = new ContentValues();
insertValues.put(KEY_CLASS, qclass);
insertValues.put(KEY_QUESTION, question);   
yourDbName.insertWithOnConflict(DATABASE_TABLE, null, insertValues, SQLiteDatabase.CONFLICT_IGNORE);  

KEY_QUESTION + " TEXT NOT NULL UNIQUE);";

【讨论】:

  • 非常感谢!这完美!我不知道有一种方法可以使用 ContentValues 进行冲突忽略。欣赏它! (我会投票,但我没有足够的代表......)
  • 你应该尽量不要使用 rawQuery 除非你必须这样做,其他查询方法似乎更多的打字但它可以为你省去很多麻烦。始终使用 selectionArgs。
  • 理论上你将如何使用原始查询来做到这一点?
  • "插入或忽略进入" + DATABASE_TABLE + " ("+KEY_CLASS+", "+ KEY_QUESTION+ ") VALUES (?, ?)", new String[]{qclass, question};
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2013-04-23
相关资源
最近更新 更多