2013-03-26 67 views
1

我正在写一个应用程序,它将访问sqlite数据库进行读写。 我已经使用sqlite数据库浏览器创建了数据库,并将其推送到/ data/local/tmp。 它也将被其他应用程序使用,并且即使我的应用程序不存在也必须存在于系统上 我的应用程序可以读取数据库,但我无法更新数据库。 我的清单是:android sqlite更新错误

<?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> 

这些消息在logcat的是:

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 

触发这是代码:

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

我在做什么错?

+0

你检查了/ data/local/tmp中的数据库文件的文件权限吗?也许它不可读/可写。但无论如何,为什么不把文件放在外部存储上? – dermatthias 2013-03-26 17:17:18

+0

@dermatthias可能出于安全原因:) – Sajmon 2013-03-26 18:00:29

+0

@dermatthias Sajmon说,sd将用于其他目的。所有权限均为rw。 – vathan 2013-03-27 09:39:02

回答

0

默认情况下,数据库目录是

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

你不会在/data访问其他目录。您可以通过root访问并执行shell代码。我不相信是最佳的。

+0

即使未安装应用程序,我仍然需要数据库。也许我可以尝试更新数据库作为我的应用程序发出的shell命令 – vathan 2013-03-27 09:41:45