2013-03-26 5 views
1

J'écris une application qui va accéder à une base de données sqlite pour la lecture et l'écriture. J'ai créé la base de données en utilisant le navigateur de base de données sqlite et l'ai poussé vers/data/local/tmp. Il sera également utilisé par d'autres applications et doit exister sur le système même si mon application ne le fait pas Mon application peut lire la base de données étant donné le chemin d'accès complet, mais je ne peux pas mettre à jour la base de données. Mon manifeste est:android sqlite erreur de mise à jour

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.intralot.settings" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="15" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/my_title" 
     android:theme="@android:style/Theme.Light" > 
     <activity 
      android:name="....." 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Les messages LogCat sont:

I/SqliteDatabaseCpp(4002): sqlite returned: error code = 14, msg = cannot open file at line 27701 of [8609a15dfa], db=/data/local/tmp/settings.db 
I/SqliteDatabaseCpp(4002): sqlite returned: error code = 14, msg = os_unix.c: open() at line 27701 - "" errno=2 path=/data/local/tmp/settings.db-journal, db=/data/local/tmp/settings.db 
I/SqliteDatabaseCpp(4002): sqlite returned: error code = 14, msg = statement aborts at 20: [UPDATE settings SET ip=? WHERE _id=1] , db=/data/local/tmp/settings.db 

Le code qui déclenche c'est:

try{ 
    result = db.update(SETTINGS_TABLE, newValues, "_id="+index, null); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

Qu'est-ce que je fais mal?

+0

Avez-vous vérifié les autorisations de fichier pour le fichier de base de données dans/data/local/tmp? Peut-être que ce n'est pas lisible/inscriptible. Mais de toute façon, pourquoi ne pas mettre le fichier sur le stockage externe? – dermatthias

+0

@dermatthias peut-être pour des raisons de sécurité :) – Sajmon

+0

@dermatthias comme dit Sajmon, le sd sera utilisé à d'autres fins. Les permissions sont valables pour tous. – vathan

Répondre

0

Par défaut, le répertoire de base de données est

/data/data/{packagename.app.name}/databases 

Vous n'accéder à d'autres répertoires dans /data. Vous pourriez avoir accès avec root et exécuter du code shell. Ce que je ne crois pas est optimal.

+0

J'ai toujours besoin de la base de données présente même si l'application n'est pas installée. Peut-être que je pourrais essayer de mettre à jour la base de données comme une commande shell émise par mon application – vathan

Questions connexes