【问题标题】:Sqlitedatabase query not working when selecting by _id通过_id选择时Sqlitedatabase查询不起作用
【发布时间】:2013-03-25 03:11:06
【问题描述】:

我的 sqlitedatabase 已经被这个问题困扰了好几天了。

我的插入方法有效,我在它运行后中断并检查数据库现在是否包含行(在它为空之前),通过查询整个数据库,它有效。 这是返回生成的puzzleId的插入方法。

    public int savePuzzleToEdit(ContentValues puzzle, Integer puzzleId) {
      Integer id = puzzle.getAsInteger(General.ID);
      if (id == 0 && puzzleId == null) {
        puzzle.remove(General.ID);
        puzzleId = (int) ourDatabase.insert(PUZZLE_TABLE, null, puzzle);
      }else {
        ....
      }
    return puzzleId

然而,查询方法不返回任何结果,即光标为空。

public ArrayList<ContentValues> getCreatedPuzzles(int puzzleId) {
  Cursor c = ourDatabase.query(PUZZLE_TABLE, null, "_id = " + puzzleId, null, null, null, null, null);
        while (c.moveToNext()) { // Generate return list ...}

我尝试在插入之后和查询之前进行中断,以查看数据库中是否确实存在行,确实存在。但是,我无法通过按 id 选择进行查询。但是,我可以通过表中的其他字段进行查询并得到正确的行,因此它必须是有错误的 _id 字段。

我还尝试使用 rawQuery 方法,该方法在查询整个数据库或除 id 之外的任何其他字段时也可以使用。

这是创建语句:

private static final String PUZZLE_TABLE_CREATE =
            "CREATE TABLE puzzle ( _id INTEGER, name varchar(45), category " +
                    "varchar(25), publishdate DATE, rating INT, timesplayed INT, numberOfQuestions INT);";

据我了解,id 必须是 INTEGER 才能在插入时自动递增,我相信这是可行的,因为 insert 方法返回一个 id,该 id 因插入而异。

查询方法不会返回任何错误或异常,并且看起来表中没有具有该 id 的行。我假设返回的puzzleId 也作为id 存储在表中,但这可能是错误的?!

我们非常感谢任何关于如何尝试解决此问题的建议或见解。

【问题讨论】:

  • 如何插入谜题?

标签: android sqlite


【解决方案1】:

首先你的创建表语句可能是错误的,如果你没有在语句中提到它,_id 将不会自动递增。应该是这样的

_id整型主键自增

并检查您的创建表语句是否有其他错误

【讨论】:

  • 为了使自动增量工作必须指定主键,这解决了我的问题 =)
猜你喜欢
  • 2019-09-07
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
相关资源
最近更新 更多