Answers:
您可以找到创建的数据库,名为 <your-database-name>
在
//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
使用文件资源管理器将其拉出,并将其重命名为.db3扩展名,以在SQLiteExplorer中使用它
使用DDMS的文件浏览器导航到仿真器目录。
700
。您需要root特权才能看到它。
为此,我所做的是
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权限...
sudo su
这是一个古老的问题,但回答可能会帮助他人。
无法在非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);
}
}
Failed to open database '/mnt/sdcard/itens'.
在Logcat
好吧,这可能会晚了,但会有所帮助。您可以访问数据库而无需通过adb植根设备
使用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/"
要删除“文件”并添加“数据库”。
BTW Eclipse会警告您有关硬编码的“ data / data /”字符串,但在这种情况下则不会。
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数据库。当您开始在程序中处理数据库时,能够在程序外部直接访问它,检查程序刚完成并进行调试非常重要且有用。
这在Android上也很重要。
这是这样做的方法:
1)启动仿真器(或将您的真实设备连接到PC)。为此,我通常从Eclipse启动我的程序之一。2)在android tools目录中启动命令提示符。3)输入adb shell。这将在您的仿真器/连接的设备上启动一个unix shell。4)转到数据库所在的目录:cd数据/数据在这里您拥有设备上所有应用程序的列表进入应用程序目录(请注意,Unix区分大小写!!)cd com.alocaly.LetterGame并下降在数据库目录中:cd数据库在这里您可以找到所有数据库。就我而言,只有一个(现在):SCORE_DB 5)在要检查/更改的数据库上启动sqlite:sqlite3 SCORE_DB在这里,您可以检查存在哪些表:.tables 6)输入所需的任何SQL指令:从得分中选择*;
这很简单,但是每次需要时,我都不知道在哪里可以找到它。
您还可以检查IDE是否具有Eclipse的DDMS透视图之类的实用程序,该实用程序可让您浏览目录和/或在仿真器或有根设备中进行文件复制。
定义您的数据库名称,例如:
private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";
您可以在中查看数据库:
storage/sdcard0/yourdatabasename.db
不要像这样对路径进行硬编码//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
。很好,它在大多数情况下都可以正常工作,但是这种情况不适用于可以支持多个用户的设备。路径可以像//data/user/10/<Your-Application-Package-Name>/databases/<your-database-name>
。可能的解决方案是使用context.getDatabasePath(<your-database-name>)
。