1

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

    <?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();
}

我究竟做错了什么?

4

1 回答 1

0

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

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

您将无法访问/data. 您可以通过 root 访问并执行 shell 代码。我不认为这是最佳的。

于 2013-03-26T18:31:59.417 回答