我的sqlite数据库在安卓系统中存储在哪里?

13

我在Android中创建了一个sqlite数据库,虽然我可以在我的代码中查询它,但我在文件系统/SD卡中找不到它。

我已经查看了其他的stackoverflow问题,它并不在data/data/package-name...中。

我确实在我的应用程序数据条目中看到了52KB的空间,因此它确实存在。而且当我再次运行应用程序时,它不会触发OnCreate,这意味着它已经有了数据库。

我的手机已经root,我正在使用一个可以正常运行的自定义jelly bean rom。

有什么想法它可能在哪里吗?

代码:C#

public class SqliteHelper : SQLiteOpenHelper
{
    private const string DATABASE_NAME = "Book";
    private const int DATABASE_VERSION = 1;

public SqliteHelper(Context ctx)
    : base(ctx, DATABASE_NAME, null, DATABASE_VERSION)
{ }

// Method is called during creation of the database
public override void OnCreate(SQLiteDatabase db)
{
    db.BeginTransaction();
    try
    {
        db.ExecSQL("CREATE TABLE Chapters (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL);");

        ContentValues cv = new ContentValues();
        cv.Put("Name", "1. Family");
        db.Insert("Chapters", null, cv);
        cv.Put("Name", "2. Shopping");
        db.Insert("Chapters", null, cv);
        cv.Put("Name", "3. Work");
        db.Insert("Chapters", null, cv);

        db.SetTransactionSuccessful();
    }
    finally
    {
        db.EndTransaction();
    }

    //if(db.IsOpen())
    //  db.Close();
}

展示一下你初始化数据库连接的代码,这样可以让我们了解你的文件存储在哪里。 - Daniel Bo
6个回答

26
在我的已经root的手机上,它在这里:
/data/data/<your_app_package_name>/databases/<database_name>

真实生活的例子:
/data/data/com.my.package/databases/mydb.db

1
回到这个问题,我意识到你是正确的。我漏掉了路径中的一个“/data”。 - sprocket12
回到这个问题,经过一段时间的思考,我意识到我喜欢你的伪代码 @لَاإِلٰهَإِلَّاالله :) - S.Thiongane
我无法在任何地方看到'/data/data/<your_app_package_name>'。我需要root手机才能看到吗? - Anil P Babu
@anil_pulikoden 是的,你应该这样做。 - Shamshid
在Marshmallow之后,数据库的位置不同了。这是真的吗? - Kiran Maniya

11
  1. 打开工具 -> DDMS 或单击工具栏中 SDK 管理器旁边的设备监视器图标。
  2. 设备监视器窗口将打开,在文件浏览器选项卡中单击 data -> data -> 您的项目名称。然后您的数据库文件将打开。单击“从设备拉取文件”图标。使用 .db 扩展名保存文件。
  3. 打开 Firefox,按 Alt 键,选择工具 -> SQLiteManager。
  4. 依次选择“数据库” -> “连接到数据库” -> 浏览您的数据库文件并单击确定。现在您的 SQLite 文件已打开。

啊 - 我想喜欢这个答案。当我尝试展开“data”文件夹时,里面什么也不显示。需要root权限吗? - boltup_im_coding
@boltup_im_coding,你有没有发现这个问题需要root权限吗?我也遇到了同样的问题。 - wizloc
1
@wizloc 我有99%的把握认为你需要,除非Android有一种方式可以知道你的应用正在被调试并允许你只访问那个文件夹。 - boltup_im_coding

8
它就在那里。你无法在Android设备上访问它的唯一原因是该文件夹是私有的,不能使用常规方法看到,操作系统保护该文件夹,只能由特定应用程序使用该文件夹(及其内容,例如数据库)。
如果想要查看它,请运行模拟器,运行您的应用程序,进入DDMS视图,然后转到 /data/data/packageName/databases ,它就在那里。如果您无法访问DDMS,请使用此ADB Shell命令:$ adb pull /data/data/packageName/databases/yourDBFilename.db

4
调用Context.getDatabasePath将给出确切的答案。

2

如果您正在使用Android Studios,则DDMS位于“工具” - “Android” - “Android设备监视器”中。 使用DDMS查找它,就像在Eclipse中一样。


这个很好用!不需要对设备进行root操作! - chetstone

1
在Android中,数据库默认存储在"data/data/yourPackageName/databases/"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接