Java 在数据库中存储历史记录

Java 在数据库中存储历史记录,java,android,sqlite,map,cursor,Java,Android,Sqlite,Map,Cursor,我想在sqlite数据库中存储历史数据。 最多应保护20个“条目” 添加新的entrie时,应删除最旧的entrie,并在列表的开头添加新的entrie。 调用历史记录时,我希望它以相反的顺序显示(首先是最新条目) 据我所知,光标本身不可能实现功能。我需要将调用的游标转换为另一种映射类型。问题是哪一个以及如何实现这些行动。这不应该那么难。历史记录表需要id列。在使用游标和适配器时,它也是必需的。将id列定义为。因此,每次向表中插入新行时,新行都会自动获得一个唯一的id,该id高于分配给之前插入的

我想在sqlite数据库中存储历史数据。 最多应保护20个“条目”

添加新的entrie时,应删除最旧的entrie,并在列表的开头添加新的entrie。 调用历史记录时,我希望它以相反的顺序显示(首先是最新条目)


据我所知,光标本身不可能实现功能。我需要将调用的游标转换为另一种映射类型。问题是哪一个以及如何实现这些行动。

这不应该那么难。历史记录表需要id列。在使用游标和适配器时,它也是必需的。将id列定义为。因此,每次向表中插入新行时,新行都会自动获得一个唯一的id,该id高于分配给之前插入的行的最后一个id

您必须编写一个方法,当您要向数据库中添加新条目时,可以调用该方法。在该方法中,您可以执行以下操作

  • 检查数据库表中的项目数。
    • 如果少于20个条目,则什么也不做
    • 如果有超过或等于20个条目,则使用查询并删除该行
  • 将新条目添加到数据库中。它将自动获取表中所有行的最高id
    如果要使用光标显示列表中的条目,可以通过SQL命令定义返回行的顺序

    这应该没那么难。历史记录表需要id列。在使用游标和适配器时,它也是必需的。将id列定义为。因此,每次向表中插入新行时,新行都会自动获得一个唯一的id,该id高于分配给之前插入的行的最后一个id

    您必须编写一个方法,当您要向数据库中添加新条目时,可以调用该方法。在该方法中,您可以执行以下操作

  • 检查数据库表中的项目数。
    • 如果少于20个条目,则什么也不做
    • 如果有超过或等于20个条目,则使用查询并删除该行
  • 将新条目添加到数据库中。它将自动获取表中所有行的最高id
    如果要使用光标显示列表中的条目,可以通过SQL命令定义返回行的顺序

    当然,为什么不在函数中处理所有这些问题,将的元素添加到数据库中呢。问题是这个函数会是什么样子。例如,我不知道如何以“简单”的方式替换最旧的值。当然,我可以将日期+时间作为字符串存储在数据库中,并在每个添加/请求事件中将其转换回,然后使用某种排序按日期排序。但是,这将发生在每一个动作,这是有点多开销!当然,为什么不在函数中处理所有这些问题,将的元素添加到数据库中呢。问题是这个函数会是什么样子。例如,我不知道如何以“简单”的方式替换最旧的值。当然,我可以将日期+时间作为字符串存储在数据库中,并在每个添加/请求事件中将其转换回,然后使用某种排序按日期排序。但是,这将发生在每一个动作,这是有点多开销!这就是我要找的!我很抱歉,我使用了所有的sql命令,但是因为我很少使用sql,所以我没有想到它!谢谢id是否会自动分配?由于id最低的行将被删除,因此会有一个间隙。或者这个问题也是通过delete方法处理的?数据库通常有不同的自动递增模式。通常,每一行都会获得一个id,该id高于分配给表中任何行的任何其他id。因此,当表中有4行时,删除id为2的行并插入一个新行,新行的id为5或更高。在其他模式中,可以重用已删除行的id,或者该id不仅对于单个表是唯一的,而且对于整个数据库也是唯一的。但是我认为只提供了我提到的第一种模式。嗯,对于计数,我可以使用类似于“+HISTORY\u TABLE”的
    String sql=“SELECT count(DISTINCT”+HISTORY\u ID+”;Cursor=db.rawQuery(sql,null)但如何从光标获取计数?这样一个请求的列名称是什么?当您使用此SQL命令查询数据库时,您将得到一个游标,其中将包含一个结果行。结果行的类型为int.Cursor Cursor=db.rawQuery(“从“+HISTORY\u TABLE,null”中选择COUNT(DISTINCT“+HISTORY\u ID+”));整数计数=0;while(cursor.moveToFirst(){count=cursor.getInt(0);}count变量将包含表中的行数。这就是我要查找的!我很抱歉,我使用了所有的sql命令,但是因为我很少使用sql,所以我没有想到它!谢谢id是否会自动分配?由于id最低的行将被删除,因此会有一个间隙。或者这个问题也是通过delete方法处理的?数据库通常有不同的自动递增模式。通常,每一行都会获得一个id,该id高于分配给表中任何行的任何其他id。因此,当表中有4行时,删除id为2的行并插入一个新行,新行的id为5或更高。在其他模式中,可以重用已删除行的id,或者该id不仅对于单个表是唯一的,而且对于整个数据库也是唯一的。但是我认为只提供了我提到的第一种模式。嗯,对于计数,我可以使用类似于“+HISTORY\u TABLE”的
    String sql=“SELECT count(DISTINCT”+HISTORY\u ID+”;Cursor=db.rawQuery(sql,null)但如何从光标获取计数?这样一个请求的列名是什么?当你用这个SQL命令查询数据库时,你会得到一个游标,它将