- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
随着我应用中数据库的增长,它需要越来越多的内部手机空间。数据库中没有任何敏感/隐私数据,因此我有兴趣将其移至 SD 卡。
我正在使用 SQLiteOpenHelper 来协助数据库工作。据我了解,您不能将其用于 SD 卡上的数据库访问,因为您无法定义数据库路径。但是,Internet 上有一些(非常糟糕的)示例建议您可以覆盖此限制。但是,我从来没有编译过这些代码示例之一。
这可能吗?如果是这样——如何!请注意,Froyo 的“SD 卡上的应用程序”功能将不起作用,因为它不会移动内部文件。
最佳答案
只需使用:
SQLiteDatabase.openDatabase(DB_FULL_PATH, null, SQLiteDatabase.OPEN_READONLY);
DB_FULL_PATH 可以是你的 sdcard 的路径,比如/sdcard/mydatabase.db
编辑:
这就是我在我的应用程序中调用的访问数据库的方法....
private static DBUtil dbHelper = null;
public void openDatabase() {
if(dbHelper == null) {
dbHelper = new DBUtil(this.context);
dbHelper.openDataBase(SQLiteDatabase.OPEN_READWRITE);
}
}
public void closeDatabase() {
if(dbHelper != null) {
dbHelper.close();
dbHelper = null;
}
}
...这是我正在使用的数据库助手类,它实际上扩展了 SQLiteOpenHelper,因此您仍然可以从该类中获得所需的一切。
package com.myapp.android.db;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.myapp.android.MyApp;
import java.io.IOException;
/**
* Standard database utility class.
*
* TODO: Refactor.
*/
public class DBUtil extends SQLiteOpenHelper {
/**
* Database directory.
*
* <p>
* Example: "/sdcard/myapp/db/"
* </p>
*/
public static String DB_DIRECTORY = null;
/**
* Name of the database file.
*
* <p>
* Example: "mydatabase.db"
* </p>
*
*/
public static String DB_NAME = null;
/**
* Full absolute path of the database.
*
* <p>
* Example: "/sdcard/myapp/db/mydatabase.db"
* </p>
*/
public static String DB_FULL_PATH = null;
static {
DB_DIRECTORY = MyApp.DATA_REPOSITORY_URI + "/myapp/db/";
DB_NAME = "mydatabase.db";
DB_FULL_PATH = DB_DIRECTORY + DB_NAME;
}
private SQLiteDatabase myDataBase;
/**
* Constructor Takes and keeps a reference of the passed context in order to
* access to the application assets and resources.
*
* @param context
*/
public DBUtil(Context context) {
super(context, DB_NAME, null, 1);
try {
this.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
}
/**
* Creates a empty database on the system and rewrites it with your own
* database.
* */
public void createDataBase() throws IOException {
if (!checkDataBase()) this.getWritableDatabase();
}
/**
* Check if the database already exist to avoid re-copying the file each
* time you open the application.
*
* @return true if it exists, false if it doesn't
*/
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
// database does't exist yet.
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
public void openDataBase(int mode) throws SQLException {
try {
myDataBase = SQLiteDatabase.openDatabase(DB_FULL_PATH, null, mode);
} catch(IllegalStateException e) {
// Sometimes, esp. after application upgrade, the database will be non-closed, raising a IllegalStateException
// below. Try to avoid by simply opening it again.
Log.d(MyApp.APP, "Database non-closed. Reopening.");
myDataBase = SQLiteDatabase.openDatabase(DB_FULL_PATH, null, mode);
}
}
public void openDataBase() throws SQLException {
openDataBase(SQLiteDatabase.OPEN_READWRITE);
}
public SQLiteDatabase getDb() {
return myDataBase;
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
关于android - 是否可以将内部数据库移动到 SDCard?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3436434/
我在 /data/data/files/settings.dat 中有一个文件并想将此文件存储/复制到 sdcard 中,该文件已被很好地读取但是当尝试将其复制到 sdcard 时,我有一个异常(ex
我只想知道如何在android模拟器中删除虚拟sdcard。 最佳答案 有了有关使用“rm -r *”系列命令的预期注意事项和警告,您还可以使用:adb -e shell rm -r/mnt/sdca
我正在尝试将位图保存到图片目录中。这是代码 File path = Environment.getExternalStoragePublicDirectory(Environm
我有一个很大的(50 兆)下载,如果已安装,我想将其加载到 SD 卡中。如果没有sdcard,我就下载到内部存储。我检查两种情况下的可用空间。 我的代码在模拟器和我的 Droid 2 上运行良好。我的
我快被一个奇怪的问题气疯了。如果我在我的代码中创建一个文件夹作为 directory_path = Environment.getExternalStorageDirectory()
我有一个特殊的问题,我有一个在启动完成时启动的 android 服务。服务完成从 sdcard 读取文件并将 pid 写入 sdcard 的工作,但是 .使用日志我知道原因是:无法将数据写入 sdca
我正在为 Yocto (Morty) 开发一个 sdcard 图像类,这基本上是直截了当的。必须在屋顶完成后构建 SD 卡镜像。 这可以由 IMAGE_TYPEDEP_sdcard 指示,在我的情况下
任何人都可以帮我解决 traceview 问题!我创建了 sdcard 并将其安装在我的模拟器上,关闭我的应用程序后,当我尝试拉取复制文件时(使用命令:adb pull/sdcard/calc.tra
我正在开发一个基本的音乐播放器,它将获取 SDCard 上的歌曲。它处于早期阶段,我遇到了一个小问题。每当我在手机上运行该应用程序时,它都能很好地播放 SDCard 上的歌曲。现在,当我在教师手机上运
我正在尝试将我在某些 Activity 中拥有的位图保存到我为此目的创建的目录中的外部存储。将图像保存到 sdcard(外部存储器,而不是外部 sd)的方法在不同的类(和不同的包)中,所以我假设我需要
我知道这个问题可能已经回答了很多次,我也进行了搜索,但我无法解决我的问题。每次我尝试写入 SD 卡时,它似乎都会写入内部存储。我的代码行很简单 File root = android.os.Envir
我想知道,是否可以在重新启动应用程序时暂停下载,退出应用程序并恢复从远程服务器下载文件到手机的 SDCard。 然后跟进问题:我有一个通过 HTTP 下载的代码。我也可以通过 FTP 完成吗?哪个更好
我的应用程序中有一个 Activity ,它基本上是一个画廊,显示位于我的 SD 卡上的图片。我正在使用此功能重新安装 sdcard 以在 Activity 开始时扫描新图像: sendBro
我想在 SD 卡上的特定文件夹中创建新文件时收到通知(通过广播)。我可以创建服务并为其轮询,但我更喜欢系统事件(如果存在的话)。 最佳答案 我找到了。 FileObserver会做的。 关于Andro
随着我应用中数据库的增长,它需要越来越多的内部手机空间。数据库中没有任何敏感/隐私数据,因此我有兴趣将其移至 SD 卡。 我正在使用 SQLiteOpenHelper 来协助数据库工作。据我了解,您不
我正在尝试将 Http 帖子回复中的文件写入 sdcard 上的文件。在检索到数据的字节数组之前,一切正常。 我尝试在 list 中设置 WRITE_EXTERNAL_STORAGE 权限并尝试了我在
我想在 Sdcard 中创建目录,并且我确实遵循: 我添加了:在 list 中。 我通过以下方式获取 root_path:public static final String ROOT_PATH =
我正在尝试使用以下代码在/storage/emulated/0/Pictures 下创建目录: File(Environment.getExternalStoragePublicDir
为什么Environment.getExternalStorageDirectory()返回内部存储(storage/sdcard0/)?就我而言,sdcard0 是本地的,sdcard1 是外部的.
我的对话框显示目录 /sdcard 及其所有文件。选择文件/图像后,路径将与位图图像一起保存,例如 file.name = "/sdcard/Pictures/Screenshots/Screensh
我是一名优秀的程序员,十分优秀!