何时使用内部存储与sqlite

时间:2013-11-20 01:18:04

标签: android sqlite

我正在制作一个简单的Android应用程序。

  • 首次加载时,应用会向用户显示项目列表(A)
  • 用户可以在此列表中添加更多项目
  • 可以点击每个项目,这将显示另一个列表(B)
  • 用户也可以在第二个列表中添加更多项目。

通过在列表中存储几个项目并在ListView中显示它们,我已经完成了第一个要点。我想知道用户如何将新项目添加到列表中,我将如何坚持?

我已经看过几个关于内部存储和sql lite的教程。在这种情况下哪一个最适合我的需求?

我真的会从github上的示例应用程序中受益,这种应用程序显示了如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

你也知道:

  

内部存储

     
    

将私人数据存储在设备内存中。

         

默认情况下,保存到内部存储的文件对您的应用程序是私有的,而其他应用程序无法访问它们(用户也无法访问)。当用户卸载您的应用程序时,将删除这些文件。

  

当用户想要通过internal storage / InputStream读取/写入大文件时,他们总是使用OutputStream

  

SQLite数据库

     
    

将结构化数据存储在私人数据库中。

  

请注意structured data,您可以访问Sqlite database via name,这样会很快。

P / s:如果您需要向列表项膨胀数据。您应该使用Sqlite,因为它可以快速轻松地通过名称访问数据。

答案 1 :(得分:0)

这实际上取决于您希望如何使用数据。 SQLite易于在Android上使用并且运行速度很快。我在我的应用程序中将它用于相当大的数据库。

我还建议把它放在内部存储器中。这样,它就可以防止其他应用程序监视用户的数据(除非他“扎根”他的手机)。使用内部存储的一个警告是很难看到您的数据。要访问数据库,您需要在模拟器上运行Android(您将有权查看所有文件)或将数据库(通过编写一些代码来复制文件)复制到外部存储。或者只是在调试时暂时将db放在外部存储器中。

我没有任何github参考资料,但可以给你一个快速概述。子类SQLiteOpenHelper并为您的CRUD操作添加方法。

public class DbHelper extends SQLiteOpenHelper
{
  private static final int DB_VERSION = 1;

  @Override
  public void onCreate(SQLiteDatabase db) 
  {
    String[] ddl = {"... all the tables you need to create..."};
    db.beginTransaction();
    try
    {
      for (int i = 0, limit = ddl.length;  i < limit;  i++)
        db.execSQL (ddl [i]);
      db.setTransactionSuccessful();
    }
    finally
    {
      db.endTransaction();
    }
  }

  @Override
  public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) 
  {
    db.beginTransaction();
    try
    {
      for ( ; oldVersion < newVersion;  oldVersion++)
      {
        if (oldVersion == 1)
          onUpgrade1to2 (db);
        else if (oldVersion == 2)
          ...
      }

      db.setTransactionSuccessful();
    }
    finally
    {
      db.endTransaction();
    }
  }

  public void insertItem (SQLiteDatabase db, Item item) // Item is one of your objects
  {
    ContentValues values = new ContentValues();

    // id
    values.put ("id", item.id);
    values.put ("subject", item.subject);
    ...

    db.insertOrThrow ("Items", null, values);
  }

   ... and so on ...
}

如果您需要有关如何查询,更新和删除...

的信息,请与我们联系