首页 文章

设备上sqlite数据库的位置

提问于
浏览
88

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

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

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

15 回答

  • 3

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

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

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

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

  • 9

    为此,我做的是

    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" />
    

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

  • 0

    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);
    

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

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

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

  • 4

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

  • 0

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

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

    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);
        }
    }
    
  • 0

    /data/data/packagename/databases/

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

  • 8

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

  • 23

    这可能会迟到但它会有所帮助 . 您可以通过adb访问数据库 without rooting您的设备

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

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

    现在你可以从这里打开 .

  • 16

    如果将数据库命名为文件而不提供路径,那么获取其文件夹的最常用方法如下:

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

    其中 DBAdapter.DATABASE_NAME 只是 String ,如"mydatabase.db" .
    Context.getFilesDir() 返回应用程序文件的路径,如: /data/data/<your.app.packagename>/files/ 这就是为什么需要 .getParent()+"/databases/" ,删除"files"并添加"databases" .
    BTW Eclipse会警告你有关硬编码的"data/data/"字符串,但在这种情况下不会 .

  • 43
    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";
    

    并检查您的数据库是否存储到Device Storage . 如果是,您必须在Manifest.xml中使用权限:

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

    您可以使用adb shell how-to访问它

    来自以上链接的内容:

    教程:如何使用命令行访问Android数据库 . 当您开始处理程序中的数据库时,能够直接在程序外部访问它,检查程序刚刚执行的操作以及调试是非常重要和有用的 . 而且在Android上也很重要 . 以下是如何做到这一点:1)启动模拟器(或将您的真实设备连接到PC) . 我通常从Eclipse启动我的一个程序 . 2)在android tools目录中启动命令提示符 . 3)输入adb shell . 这将在您的仿真器/连接设备上启动unix shell . 4)转到数据库所在的目录:cd data / data这里有你设备上所有应用程序的列表进入你的应用程序目录(注意,Unix是区分大小写的!)cd com.alocaly.LetterGame and descend在您的数据库目录中:cd databases您可以在此处找到所有数据库 . 在我的例子中,只有一个(现在):SCORE_DB 5)在要检查/更改的数据库上启动sqlite:sqlite3 SCORE_DB从这里,您可以检查存在哪些表:.tables 6)输入您想要的任何SQL指令:从分数中选择*;这很简单,但每次我需要它时,我都不知道在哪里可以找到它 .

  • 11

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

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

  • 3

    您还可以检查您的IDE是否具有Eclipse的DDMS透视图等实用程序,它允许您浏览目录和/或将文件复制到仿真器或根设备 .

  • 22

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

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

    您可以在以下位置查看您的数据库:

    storage/sdcard0/yourdatabasename.db
    
  • 88

    public class MySQLiteOpenHelper扩展了SQLiteOpenHelper {MySQLiteOpenHelper(Context context){super(context,“/ mnt / sdcard / database_name.db”,null,0); }}

    不要硬编码“/ sdcard /”;请改用Environment.getExternalStorageDirectory() . getPath()

相关问题