我以编程方式创建了一个sqlite数据库,其默认方式是扩展 SQLiteOpenHelper 并覆盖 onCreate() . 这样,db就会在需要时动态创建 .
SQLiteOpenHelper
onCreate()
我想用sqlite浏览器检查OS X机器上db文件的内容 . 我知道db文件的名称,但我在设备上找不到它 . 我已经通过USB连接到设备并查找了finder和终端,但我找不到db文件 .
android设备上的sqlite数据库的默认位置是什么?
您可以找到您创建的数据库,名为 <your-database-name>
<your-database-name>
在
//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
使用File explorer将其拉出并重命名为.db3扩展名以在SQLiteExplorer中使用它
使用DDMS的File explorer导航到模拟器目录 .
为此,我做的是
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包含许多路径函数: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打开数据库,则会自动生成此路径 .
如果你在谈论真实设备 /data/data/<application-package-name> 是无法访问的 . 你必须拥有root权限......
/data/data/<application-package-name>
这是一个古老的问题,但回答可能有助于其他人 .
无法在非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); } }
/data/data/packagename/databases/
即
/data/data/com.example.program/databases/
SQLite数据库只是一个文件 . 您可以获取该文件,移动它,甚至将其复制到另一个系统(例如,从手机到工作站),它将正常工作 . Android将文件存储在 /data/data/packagename/databases/ 目录中 . 您可以使用Eclipse中的 adb command 或 File Explorer view ( Window > Show View > Other... > Android > File Explorer )来查看,移动或删除它 .
adb command
File Explorer view
Window > Show View > Other... > Android > File Explorer
这可能会迟到但它会有所帮助 . 您可以通过adb访问数据库 without rooting您的设备
使用cmd启动adb并键入以下命令
-run-as com.your.package -shell@android:/data/data/com.your.package $ ls cache databases lib shared_prefs
现在你可以从这里打开 .
如果将数据库命名为文件而不提供路径,那么获取其文件夹的最常用方法如下:
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/"字符串,但在这种情况下不会 .
DBAdapter.DATABASE_NAME
String
Context.getFilesDir()
/data/data/<your.app.packagename>/files/
.getParent()+"/databases/"
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中使用权限:
您可以使用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指令:从分数中选择*;这很简单,但每次我需要它时,我都不知道在哪里可以找到它 .
如果您的应用程序创建了一个数据库,则该数据库默认保存在目录 DATA/data/APP_NAME/databases/FILENAME. 中
DATA/data/APP_NAME/databases/FILENAME.
以上部分目录是根据以下规则构建的 . DATA是Environment.getDataDirectory()方法返回的路径 . APP_NAME是您的应用程序名称 . FILENAME是您在数据库的应用程序代码中指定的名称 .
您还可以检查您的IDE是否具有Eclipse的DDMS透视图等实用程序,它允许您浏览目录和/或将文件复制到仿真器或根设备 .
定义您的数据库名称,如:
private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";
您可以在以下位置查看您的数据库:
storage/sdcard0/yourdatabasename.db
public class MySQLiteOpenHelper扩展了SQLiteOpenHelper {MySQLiteOpenHelper(Context context){super(context,“/ mnt / sdcard / database_name.db”,null,0); }}
不要硬编码“/ sdcard /”;请改用Environment.getExternalStorageDirectory() . getPath()
15 回答
您可以找到您创建的数据库,名为
<your-database-name>
在
使用File explorer将其拉出并重命名为.db3扩展名以在SQLiteExplorer中使用它
使用DDMS的File explorer导航到模拟器目录 .
为此,我做的是
要做到这一点,您的应用必须具有访问SD卡的权限,将以下设置添加到您的manifest.xml
不是很好的方式,但有效 .
Context包含许多路径函数:Context.getXXXPath()
其中一个是android.content.Context.getDatabasePath(String dbname),它返回名为dbname的数据库的绝对路径 .
在这种情况下,返回的路径将类似于:
请注意,如果使用SQLiteOpenHelper打开数据库,则会自动生成此路径 .
如果你在谈论真实设备
/data/data/<application-package-name>
是无法访问的 . 你必须拥有root权限......这是一个古老的问题,但回答可能有助于其他人 .
无法在非root设备上接收Android保存数据库的默认路径 . 因此,访问数据库文件(仅适用于调试环境)的最简单方法是修改类的构造函数:
请记住使用以下行更改 生产环境 环境:
/data/data/packagename/databases/
即
/data/data/com.example.program/databases/
SQLite数据库只是一个文件 . 您可以获取该文件,移动它,甚至将其复制到另一个系统(例如,从手机到工作站),它将正常工作 . Android将文件存储在
/data/data/packagename/databases/
目录中 . 您可以使用Eclipse中的adb command
或File Explorer view
(Window > Show View > Other... > Android > File Explorer
)来查看,移动或删除它 .这可能会迟到但它会有所帮助 . 您可以通过adb访问数据库 without rooting您的设备
使用cmd启动adb并键入以下命令
现在你可以从这里打开 .
如果将数据库命名为文件而不提供路径,那么获取其文件夹的最常用方法如下:
其中
DBAdapter.DATABASE_NAME
只是String
,如"mydatabase.db" .Context.getFilesDir()
返回应用程序文件的路径,如:/data/data/<your.app.packagename>/files/
这就是为什么需要.getParent()+"/databases/"
,删除"files"并添加"databases" .BTW Eclipse会警告你有关硬编码的"data/data/"字符串,但在这种情况下不会 .
并检查您的数据库是否存储到Device Storage . 如果是,您必须在Manifest.xml中使用权限:
您可以使用adb shell how-to访问它
来自以上链接的内容:
如果您的应用程序创建了一个数据库,则该数据库默认保存在目录
DATA/data/APP_NAME/databases/FILENAME.
中以上部分目录是根据以下规则构建的 . DATA是Environment.getDataDirectory()方法返回的路径 . APP_NAME是您的应用程序名称 . FILENAME是您在数据库的应用程序代码中指定的名称 .
您还可以检查您的IDE是否具有Eclipse的DDMS透视图等实用程序,它允许您浏览目录和/或将文件复制到仿真器或根设备 .
定义您的数据库名称,如:
您可以在以下位置查看您的数据库:
不要硬编码“/ sdcard /”;请改用Environment.getExternalStorageDirectory() . getPath()