如何在SD卡中存储Android SQLite数据库
我刚刚创建了数据库,它默认存储在data/data/database文件夹中。现在我想将数据库存储在SD卡中,我使用了以下代码。请建议我在哪里添加代码。谢谢 代码:如何在SD卡中存储Android SQLite数据库,android,database,sqlite,android-sdcard,Android,Database,Sqlite,Android Sdcard,我刚刚创建了数据库,它默认存储在data/data/database文件夹中。现在我想将数据库存储在SD卡中,我使用了以下代码。请建议我在哪里添加代码。谢谢 代码: public class DataBaseHandler { SQLiteDatabase database; private static DataBaseHandler obj; private final String TABLE_NAME = "main_db"; private fi
public class DataBaseHandler {
SQLiteDatabase database;
private static DataBaseHandler obj;
private final String TABLE_NAME = "main_db";
private final String COLUMN_FIRST = "_id";
MovieDetails md = new MovieDetails();
private DataBaseHandler(Context context) {
DataBase dbobj = new DataBase(context, "Id_db.db", null, 1);
database = dbobj.getWritableDatabase();
}
public static DataBaseHandler getinstance(Context context) {
if (obj == null) {
obj = new DataBaseHandler(context);
}
return obj;
}
public void insertData(String id) {
try {
ContentValues values = new ContentValues();
values.put(COLUMN_FIRST, id);
database.insert(TABLE_NAME, null, values);
} catch (Exception er) {
Log.d("Error is===", er.toString());
}
}
public void deleteData(String id) {
database.delete(TABLE_NAME, BaseColumns._ID + "=" + id, null);
}
public Cursor getData() {
String[] columns = { BaseColumns._ID, COLUMN_FIRST };
return database
.query(TABLE_NAME, columns, null, null, null, null, null);
}
private class DataBase extends SQLiteOpenHelper {
public DataBase(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + BaseColumns._ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_FIRST
+ " varchar(50)NOT NULL UNIQUE);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
使用此类复制数据库:
public class MyDatabaseTools {
private String appName = "";
private String packageName = "";
public boolean backup() {
boolean rc = false;
boolean writeable = isSDCardWriteable();
if (writeable) {
File file = new File(Environment.getDataDirectory() + "/data/" + packageName + "/databases/" + MySQLiteOpenHelper.getDatabaseName());
File fileBackupDir = new File(Environment.getExternalStorageDirectory(), appName + "/backup");
if (!fileBackupDir.exists()) {
fileBackupDir.mkdirs();
}
if (file.exists()) {
File fileBackup = new File(fileBackupDir, MySQLiteOpenHelper.getDatabaseName());
try {
fileBackup.createNewFile();
FileUtils.copyFile(file, fileBackup);
rc = true;
} catch (IOException ioException) {
//
} catch (Exception exception) {
//
}
}
}
return rc;
}
private boolean isSDCardWriteable() {
boolean rc = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
rc = true;
}
return rc;
}
public MyDatabaseTools(final Context context, final String appName) {
this.appName = appName;
packageName = context.getPackageName();
}
}
如果您不了解如何使用它,请参阅。可能重复感谢@jfs的回复,但您能否在我的上述代码中告诉我,在SD卡中存储数据库的代码必须放在哪里……在上述代码中实现它将不是一件好事。当你完成创建数据库时,你可以在活动中调用这个类。告诉我一个想法@Ninja,当我们创建数据库时,我将保存在data/data/databases文件夹中,但我不想保存在这里,我必须将其保存在SD卡中。这可能吗?如果可能的话。如何..是的。使用openDatabase(),您可以在任何地方放置和打开数据库,即SQLiteDatabase.openDatabase(“/sdcard/mydatabase.db”,null,SQLiteDatabase.open\u READONLY);获取android.database.sqlite.SQLiteCantOpenDatabaseException:所以请在此上下文中帮助我..我的代码是私有DataBaseHandler(上下文){database dbobj=new database(context,DB_NAME,null,1);database=dbobj.getwriteabledatabase();SQLiteDatabase.openDatabase(“/sdcard/Id_DB.DB”,null,SQLiteDatabase.OPEN_READONLY);}此链接将帮助您。如果你有问题,请告诉我。