web-dev-qa-db-fra.com

Comment stocker la base de données sqlite directement sur sdcard

je veux créer ma base de données sqlite dans sdcard au lieu du chemin par défaut ... je veux accéder à toutes mes données à partir de sdcard également J'ai utilisé ce code:

            private static class OpenHelper extends SQLiteOpenHelper {

    OpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        SQLiteDatabase.openOrCreateDatabase("/sdcard/"+DATABASE_NAME,null);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "
                + TABLE_NAME
                + " (id INTEGER PRIMARY KEY, name TEXT, number TEXT, skypeId TEXT, address TEXT, image BLOB)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

Problème:

Quand je vois le fichier de base de données dans le chemin par défaut, je peux voir toutes les données et la table, mais quand je vois le fichier de base de données créé dans la carte SD, il ne montre aucune donnée mais ne montre que le fichier de base de données

IN constructeur il crée seulement le fichier dans sdcard mais dans le chemin par défaut il fait tout bien ..... Comment stocker toutes les Sqlitedata sur sdcard pour un accès ultérieur?

20
Shiv

J'ai créé ma base de données avec

    public DatabaseHelper(final Context context) {
    super(context, Environment.getExternalStorageDirectory()
            + File.separator + FILE_DIR
            + File.separator + DATABASE_NAME, null, DATABASE_VERSION);
}

et n'a eu aucun problème plus loin. Je suppose que votre appel à super () devrait également faire référence à la carte SD.

43
koljaTM

Vous fournissez un nom incomplet dans votre appel super(). Essayez d'utiliser:

OpenHelper(Context context) {
    super(context, "/sdcard/"+DATABASE_NAME, null, DATABASE_VERSION);
    SQLiteDatabase.openOrCreateDatabase("/sdcard/"+DATABASE_NAME,null);

}

Sinon, vous devriez toujours utiliser Environment.getExternalStoreDirectory() pour obtenir le chemin d'accès au stockage externe et vérifier également l'état du stockage externe avant de tenter de l'utiliser.

2
Raghav Sood
public DataBaseHelper(final Context context) {

    super(context, Environment.getExternalStorageDirectory()
    + File.separator+ MYDATABASE_NAME, null, MYDATABASE_VERSION);
}

**Also Add permission in Android Manifest
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />**
1
sarath chambayil

Depuis Android 6.0 (API niveau 23), les utilisateurs accordent des autorisations aux applications pendant l'exécution de l'application et non lors de son installation. Cette approche simplifie le processus d'installation de l'application, car l'utilisateur n'a pas besoin d'accorder des autorisations lorsqu'il installe ou met à jour l'application.

Pour obtenir des autorisations au moment de l'exécution, vous devrez demander à l'utilisateur. Vous pouvez le faire de la manière suivante.

Première demande de permissions.

String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        requestPermissions(permissions, WRITE_REQUEST_CODE);

Et puis vous pouvez vérifier les résultats dans 

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
       case WRITE_REQUEST_CODE:
         if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
           //Permission granted.
           //Continue with writing files...
         }
       else{
           //Permission denied.
         }
        break;
    }
}

Voici une bonne source d’apprentissage demande-exécution-autorisations-dans-Android-Marshmallow/

0
atiruz

Il suffit de donner le chemin dans le constructeur;

 DatabaseHelper(Context context) {
    super(context, Environment.getExternalStorageDirectory()
            + File.separator + "/DataBase/" + File.separator
            + DB_NAME, null, DB_VERSION);
}
0
Vishal Vaishnav