设备上sqlite数据库的位置

Pom*_*air 97 sqlite android

我以编程方式创建了一个sqlite数据库,使用默认的扩展SQLiteOpenHelper和覆盖方式onCreate().这样,db就会在需要时动态创建.

我想用sqlite浏览器检查OS X机器上db文件的内容.我知道db文件的名称,但我在设备上找不到它.我已经通过USB连接到设备并查找了finder和终端,但我找不到db文件.

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

Sha*_*dul 93

您可以找到已创建的数据库,名为 <your-database-name>

//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
Run Code Online (Sandbox Code Playgroud)

使用File explorer将其拉出并重命名为.db3扩展名以在SQLiteExplorer中使用它

使用DDMS的File explorer导航到模拟器目录.

  • 您无法访问真实手机上的/ data文件夹.它被称为"700".您需要root权限才能看到它. (42认同)
  • 如果你想从app**获取路径**,那就是context.getDatabasePath("<your-database-name>").实际上它返回了上面的路径.您可以访问此路径以进行读写,但仅限于创建数据库的应用程序. (15认同)

RRT*_*RTW 45

为此,我做的是

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)
  {}
}
Run Code Online (Sandbox Code Playgroud)

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

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

不是很好的方式,但有效.

  • 如果它不起作用...使用数据库名称"/data/data/your.app.package/databases/your_db"只需删除扩展名".db3" (3认同)
  • 此解决方案工作正常。但是,您可以使用 getDatabasePath(your_db_name) 来获取 File 对象并使用 getAbsolutePath() 来获取准确的路径而不是构造它。getDatabasePath 方法在 ContextWrapper 中定义。 (2认同)

Sho*_*ham 26

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

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

在这种情况下,返回的路径将类似于:

/data/data/com.me.myapp/databases/mydb.db
Run Code Online (Sandbox Code Playgroud)

请注意,如果使用SQLiteOpenHelper打开数据库,则会自动生成此路径.


Bar*_*ica 24

如果你说的是真正的设备/data/data/<application-package-name>是无法访问的.你必须拥有root权限......


Ran*_*ser 18

这是一个古老的问题,但回答可能有助于其他人.

无法在非root设备上接收Android保存数据库的默认路径.因此,访问数据库文件(仅适用于调试环境)的最简单方法是修改类的构造函数:

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

请记住使用以下行更改生产环境:

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

  • 我很抱歉。这个答案已经四年了。并且 OP 比那个更旧(2010 年)。此时,Android 与 2010 年明显不同。因此数据库位置可以在另一条路径中。很抱歉我帮不了你了。 (2认同)

Ray*_*ton 12

/data/data/packagename/databases/

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


小智 9

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


Ahm*_*sir 8

这可能会迟到但它会有所帮助.您可以访问数据库,而无需通过adb使设备生根

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

-run-as com.your.package  
-shell@android:/data/data/com.your.package $ ls  
cache  
databases  
lib  
shared_prefs  
Run Code Online (Sandbox Code Playgroud)

现在你可以从这里打开.

  • 是的,对于调试APK.不,对于生产一个(或在运行中断的Android版本). (4认同)

Sta*_*tan 5

如果您将数据库命名为文件而未给出路径,则最常见的获取文件夹的方法如下:

final File dbFile = new File(getFilesDir().getParent()+"/databases/"+DBAdapter.DATABASE_NAME);
Run Code Online (Sandbox Code Playgroud)

这里DBAdapter.DATABASE_NAME只是一个String类似“mydatabase.db”。
Context.getFilesDir()返回应用程序文件的路径,例如:/data/data/<your.app.packagename>/files/多数民众赞成为什么.getParent()+"/databases/"要删除“文件”并添加“数据库”。
BTW Eclipse会警告您有关硬编码的“ data / data /”字符串,但在这种情况下则不会。