Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SD卡中存储Android SQLite数据库_Android_Database_Sqlite_Android Sdcard - Fatal编程技术网

如何在SD卡中存储Android SQLite数据库

如何在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

我刚刚创建了数据库,它默认存储在data/data/database文件夹中。现在我想将数据库存储在SD卡中,我使用了以下代码。请建议我在哪里添加代码。谢谢

代码:

    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);}此链接将帮助您。如果你有问题,请告诉我。