9
votes

Ne pas pouvoir ouvrir la base de données en mode lecture / écriture

Je suis en dessous de l'erreur:

pas une erreur (code 0): Impossible d'ouvrir la base de données en mode lecture / écriture.

j'ai ajouté xxx

J'essaie d'entrer des données dans la base de données présentes dans la carte SD, je suis capable de lire les données qui est déjà présent dans la base de données via "Open_Readonly". Je reçois une erreur lorsque vous utilisez "open_readwrite"


5 commentaires

Quelle version Android? Où sur la carte SD est la base de données? Quel code utilisez-vous pour ouvrir la base de données? La carte SD est-elle montée en lecture-écriture?


Comment nous vérifions si la carte SD est montée en lecture / écriture?


L'entrée de la carte SD dans / proc / montes a rw drapeau


Il me semble que vous utilisez getreadadableatabase () au lieu de getWRITrataBase ()


Je reçois la même erreur. Avez-vous trouvé une solution pour cela ? Mon dB est dans la carte SD.


3 Réponses :


3
votes

Votre question n'est pas si claire, mais je vais essayer de répondre.

Très probablement, votre base de données soit: p>

  1. n'existe pas encore et vous devez le créer; li>
  2. Votre Le fichier de base de données est en lecture seule , vous devez le changer (Cette question pourrait être liée). LI> ol>

    pour # 2, au lieu d'utiliser sqliteopenhelper # getreeadableAbase () code> , utilisez sqliteopenhelper # getwriRhableDatabase code> p>


    Si votre base de données est sur une unité de stockage externe, vous avez quelques autres choses à vérifier : p>

    1. est le stockage externe actuellement monté? Sinon, vous ne pouvez pas accéder à la DB. Li>
    2. est-il monté comme en lecture seule? Si oui, vous devrez changer cela. LI>
    3. Avez-vous vérifié le chemin? Est-ce correct? Li> ol>

      Le problème peut être sur l'un de ces sujets. p>

      Pour vérifier s'il est monté en lecture seule, essayez ce qui suit: p>

      /* Checks if external storage is available for read and write */
      public boolean isExternalStorageWritable() {
          String state = Environment.getExternalStorageState();
          if (Environment.MEDIA_MOUNTED.equals(state)) {
              return true;
          }
          return false;
      }
      
      /* Checks if external storage is available to at least read */
      public boolean isExternalStorageReadable() {
          String state = Environment.getExternalStorageState();
          if (Environment.MEDIA_MOUNTED.equals(state) ||
              Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
              return true;
          }
          return false;
      }
      


10 commentaires

J'ai pu lire / écrire lorsque ma base de données était présente dans le stockage interne du téléphone.


Vous essayez donc d'utiliser une base de données sur une carte SD?


Oui, j'essaie d'utiliser une base de données présente sur une carte SD


Je suis capable d'utiliser la base de données présente sur la carte SD dans Open_Readonly. Pouvez-vous s'il vous plaît dites-moi comment vérifier si elle est montée en lecture seule ou en lecture / écriture?


Édité la réponse.


C'est en écriture capable.


Eh bien ... ma première pensée serait ... pourquoi ne l'utilisez-vous pas sur le stockage interne? Autre chose que j'ai remarquée, vous n'avez besoin que de la permission d'écriture, essayez de supprimer le premier. Et avez-vous vérifié le chemin de la base de données? Est-ce correct?


Je n'utilise pas de stockage interne car je sauvegarde des images comme une blob aussi dans la base de données. J'ai vérifié le chemin et il est correct comme dans toute l'application, je suis capable de récupérer des données de la base de données en mode Open_Readonly.


Et j'ai vérifié isexternalstoragaginable () et ça retourne vrai


@SakshiaGrawal - Comment avez-vous résolu le problème? J'ai le même problème et mon dB est dans la carte SD



0
votes

avec la version 4.4 kitkat em> Certaines modifications ont été introduites liées à la manière dont Android gère la sécurité de stockage et de la sécurité des données.

Par exemple, même si iSexternalStorserverAmable () code> retournera vrai. ne pas être capable d'écrire sur une carte SD externe mais uniquement au répertoire renvoyé par Environnement.getexternalStoragedirectory () Code>. P>

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}


0 commentaires

0
votes

dans API Android 4.3 et plus bas Vous pouvez ouvrir des bases de données dans une carte SD externe, ce code fonctionnait pour lire et écrire: xxx pré>

à partir de API 4.4 Vous ne pouvez ouvrir que des bases de données dans SD externes Carte Read_only, vous devez utiliser ce code: P>

SQLiteDatabase.openDatabase(DB_PATH, null,SQLiteDatabase.OPEN_READONLY);


0 commentaires