设备上的sqlite数据库的位置

我已经创build了一个SQLite数据库以编程方式扩展SQLiteOpenHelper和覆盖onCreate()的默认方式。 这样db就可以在需要的时候随时创build。

我想用一个sqlite浏览器检查我的OS X机器上的数据库文件的内容。 我知道数据库文件的名称,但我无法在设备上find它。 我已经通过USB连接到设备,并与查找器和terminal,但我找不到数据库文件。

android设备上的sqlite数据库的默认位置是什么?

您可以find您创build的数据库,名为<your-database-name>

 //data/data/<Your-Application-Package-Name>/databases/<your-database-name> 

使用文件资源pipe理器将其拉出,并将其重命名为具有.db3扩展名以在SQLiteExplorer中使用它

使用DDMS的文件浏览器导航到模拟器目录。

为此,我所做的是

 File f=new File("/data/data/your.app.package/databases/your_db.db3"); FileInputStream fis=null; FileOutputStream fos=null; try { fis=new FileInputStream(f); fos=new FileOutputStream("/mnt/sdcard/db_dump.db"); while(true) { int i=fis.read(); if(i!=-1) {fos.write(i);} else {break;} } fos.flush(); Toast.makeText(this, "DB dump OK", Toast.LENGTH_LONG).show(); } catch(Exception e) { e.printStackTrace(); Toast.makeText(this, "DB dump ERROR", Toast.LENGTH_LONG).show(); } finally { try { fos.close(); fis.close(); } catch(IOException ioe) {} } 

要做到这一点,你的应用程序必须有权限访问SD卡,添加以下设置到您的manifest.xml

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

不是一个辉煌的方式,但工程。

Context包含许多path函数:Context.getXXXPath()
其中之一是android.content.Context.getDatabasePath(String dbname),它返回一个名为dbname的数据库的绝对path。

 Context ctx = this; // for Activity, or Service. Otherwise simply get the context. String dbname = "mydb.db"; Path dbpath = ctx.getDatabasePath(dbname); 

在这种情况下,返回的path将如下所示:

 /data/data/com.me.myapp/databases/mydb.db 

请注意,如果使用SQLiteOpenHelper打开数据库,则此path是自动生成的。

如果你正在谈论真正的设备/data/data/<application-package-name>是不可访问的。 您必须拥有root权限…

这是老问题,但回答可能会帮助别人。

Android保存数据库的默认path无法在非根设备上进行传输。 因此,访问数据库文件的最简单方法(仅适用于debugging环境)是修改类的构造函数:

 public class MySQLiteOpenHelper extends SQLiteOpenHelper { MySQLiteOpenHelper(Context context) { super(context, "/mnt/sdcard/database_name.db", null, 0); } } 

请记住用这些行更改生产环境:

 public class MySQLiteOpenHelper extends SQLiteOpenHelper { MySQLiteOpenHelper(Context context) { super(context, "database_name.db", null, 0); } } 

/data/data/packagename/databases/

/data/data/com.example.program/databases/

一个SQLite数据库只是一个文件。 你可以把这个文件,移动它,甚至复制到另一个系统(例如,从你的手机到你的工作站),它会正常工作。 Android将该文件存储在/data/data/packagename/databases/目录中。 您可以在Eclipse中使用adb commandFile Explorer viewWindow > Show View > Other... > Android > File Explorer )来查看,移动或删除它。

好吧,这可能会迟到,但它会有所帮助。 您可以通过adb访问数据库, 而不必通过设备生根

使用cmd启动adb并键入以下命令

 -run-as com.your.package -shell@android:/data/data/com.your.package $ ls cache databases lib shared_prefs 

现在你可以从这里打开。

如果你将数据库命名为文件而不给path,那么获取文件夹的最常用方法就是:

 final File dbFile = new File(getFilesDir().getParent()+"/databases/"+DBAdapter.DATABASE_NAME); 

DBAdapter.DATABASE_NAME只是一个像“mydatabase.db”这样的String
Context.getFilesDir()返回应用程序文件的path,如:/ /data/data/<your.app.packagename>/files/ .getParent()+"/databases/" files .getParent()+"/databases/"这就是为什么你需要.getParent()+"/databases/" ,删除“文件”,并添加“数据库”来代替。
顺便说一句Eclipse会警告你硬编码的“data / data /”string,但在这种情况下不会。

 By Default it stores to: String DATABASE_PATH = "/data/data/" + PACKAGE_NAME + "/databases/" + DATABASE_NAME; Where: String DATABASE_NAME = "your_dbname"; String PACKAGE_NAME = "com.example.your_app_name"; 

并检查您的数据库是否存储到设备存储。 如果是这样,你必须在Manifest.xml中使用权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

你可以使用adb shell的方式访问它

内容来自以上链接:

教程:如何使用命令行访问Android数据库。 当你开始处理程序中的数据库时,能够直接在程序外部访问它,检查程序刚刚完成的工作,并进行debugging是非常重要和有用的。

而且在Android上也很重要。

这是如何做到这一点:

1)启动模拟器(或连接你的真实设备到你的电脑)。 我通常从Eclipse启动我的程序之一。 2)在android工具目录中启动一个命令提示符。 3)键入adb shell。 这将在您的仿真器/连接的设备上启动一个unix shell。 4)进入你的数据库所在的目录:cd data / data这里你有设备上所有应用程序的列表进入你的应用程序目录(注意,Unix是区分大小写的!)cd com.alocaly.LetterGame and descend在你的数据库目录中:cd数据库在这里你可以find你所有的数据库。 在我的情况下,只有一个(现在):SCORE_DB 5)在你想检查/更改的数据库上启动sqlite:sqlite3 SCORE_DB从这里,你可以检查有什么表:.tables 6)input你想要的任何SQL指令:从分数中select*

这很简单,但是每次我需要的时候,我都不知道在哪里find它。

你也可以检查你的IDE是否有一个像Eclipse的DDMS透视图这样的工具,它允许你浏览目录和/或从仿真器或者根设备拷贝文件。

定义你的数据库名称,如:

 private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db"; 

你可以看到你的数据库:

 storage/sdcard0/yourdatabasename.db 

如果你的应用程序创build了一个数据库,这个数据库默认保存在目录DATA/data/APP_NAME/databases/FILENAME.

上述目录的部分是基于以下规则构build的。 DATA是Environment.getDataDirectory()方法返回的path。 APP_NAME是您的应用程序名称。 FILENAME是您在数据库的应用程序代码中指定的名称。

公共类MySQLiteOpenHelper扩展SQLiteOpenHelper {MySQLiteOpenHelper(上下文上下文){超(上下文,“/ mnt / sdcard /数据库名称.db”,空,0); }}

不要硬编码“/ sdcard /”; 使用Environment.getExternalStorageDirectory()。getPath()来代替