我已经以编程方式创建了一个SQLite数据库,使用默认的扩展SQLiteOpenHelper
并覆盖onCreate()
方法。这种方式可以在需要时即时创建数据库。
我想使用SQLite浏览器检查我的OS X机器上的db文件内容。 我知道db文件的名称,但是我在设备上找不到它。我通过USB连接到设备并使用Finder和终端查找,但我只是找不到db文件。
在Android设备上,sqlite数据库的默认位置在哪里?
<your-database-name>
:
位于
//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
使用文件浏览器将其提取并重命名为.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包含许多路径函数: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
- Mohammedsalim Shivani这个问题很旧了,但回答可能会帮助其他人。
在非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);
}
}
Logcat
中返回错误信息无法打开数据库'/mnt/sdcard/itens'。
- underfilho/data/data/packagename/databases/
ie
/data/data/com.example.program/databases/
SQLite数据库是一个文件。您可以将该文件移动并复制到另一个系统(例如从手机到工作站),它仍然可以正常工作。Android将该文件存储在/data/data/packagename/databases/
目录中。您可以使用adb命令
或Eclipse中的File Explorer视图
(Window > Show View > Other... > Android > File Explorer
)来查看、移动或删除它。
这可能有点晚,但可以帮助。 您可以通过adb访问数据库而无需对设备进行root处理。
使用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
只是一个字符串,比如"mydatabase.db"。Context.getFilesDir()
返回应用程序文件的路径,例如:/data/data/<your.app.packagename>/files/
,因此您需要使用.getParent()+"/databases/"
来删除"files"并添加"databases"代替它。
顺便说一句,Eclipse会警告您硬编码了"data/data/"字符串,但在这种情况下不会。