2

我目前正在开发一个 android 应用程序,并希望在其中使用一个用 php 编写的 web-companion 创建的 sqlite 文件;我目前遇到一种奇怪的行为,但找不到解决方法。情况:

  • 如果我在我的 android 应用程序中创建 db 文件,然后我使用 php PDO 进行编辑,我可以将它推回 android 并得到正确管理
  • 如果我在我的网络伴侣中创建文件,它不会被 android 应用程序正确处理

php web 创建的文件要小得多(4K vs 20K)

这是我从命令行 sqlite3 的 php 创建文件中得到的

sqlite> select * from sqlite_master;                                                              
table|android_metadata|android_metadata|2|CREATE TABLE android_metadata (locale TEXT)
table|categories_db|categories_db|3|CREATE TABLE categories_db( cat_id INTEGER PRIMARY KEY,cat_name TEXT,field1_name TEXT,field2_name TEXT,field3_name TEXT)
table|items_db|items_db|4|CREATE TABLE items_db( _id INTEGER PRIMARY KEY,id_cat INTEGER,item_name TEXT,item_field1 TEXT,item_field2 TEXT,item_field3 TEXT,item_notes TEXT)
table|settings_db|settings_db|5|CREATE TABLE settings_db( _id INTEGER PRIMARY KEY, timeout INTEGER, language TEXT, install_date TEXT, is_donor TEXT, bogus TEXT)

这是我在 android 应用程序创建的文件中看到的

sqlite> select * from sqlite_master;
table|android_metadata|android_metadata|3|CREATE TABLE android_metadata (locale TEXT)
table|items_db|items_db|4|CREATE TABLE items_db( _id INTEGER PRIMARY KEY,id_cat INTEGER,item_name TEXT,item_field1 TEXT,item_field2 TEXT,item_field3 TEXT,item_notes TEXT)
table|categories_db|categories_db|5|CREATE TABLE categories_db( cat_id INTEGER PRIMARY KEY,cat_name TEXT,field1_name TEXT,field2_name TEXT,field3_name TEXT)
table|settings_db|settings_db|6|CREATE TABLE settings_db( _id INTEGER PRIMARY KEY, timeout INTEGER, language TEXT, install_date TEXT, is_donor TEXT, bogus TEXT)

这些是 PHP 和 Android 代码的一些片段:PHP

    private $TABLE_CATEGORIES_NAME = "categories_db";
private $TABLE_ITEMS_NAME="items_db";
private $TABLE_SETTINGS_NAME="settings_db";
private $TABLE_CREATE_CATEGORIES = "CREATE TABLE categories_db( cat_id INTEGER PRIMARY KEY,cat_name TEXT,field1_name TEXT,field2_name TEXT,field3_name TEXT)";
private $TABLE_CREATE_ITEMS = "CREATE TABLE items_db( _id INTEGER PRIMARY KEY,id_cat INTEGER,item_name TEXT,item_field1 TEXT,item_field2 TEXT,item_field3 TEXT,item_notes TEXT)";
private $TABLE_CREATE_SETTINGS = "CREATE TABLE settings_db( _id INTEGER PRIMARY KEY, timeout INTEGER, language TEXT, install_date TEXT, is_donor TEXT, bogus TEXT)";

function first_entries($PDO_DSN , $SEED){
    try {
        $dbh = new PDO($PDO_DSN, null, null, null);
        $dbh->query("CREATE TABLE android_metadata (locale TEXT)");
        $dbh->query($this->TABLE_CREATE_CATEGORIES);
        $dbh->query($this->TABLE_CREATE_ITEMS);
        $dbh->query($this->TABLE_CREATE_SETTINGS);
        $dbh->query("INSERT INTO android_metadata VALUES('en_US')");
        $dbh = null;
        return true;
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
}

`用于创建数据库的ANDROID CODE:

public class mySQLiteOpenHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME = "passmanager.db";
private static final String TABLE_NAME_ITEMS = "items_db";
private static final String TABLE_NAME_CATEGORIES = "categories_db";
private static final String TABLE_NAME_SETTINGS = "settings_db";
private static final String TABLE_CREATE_ITEMS = "CREATE TABLE "
        + TABLE_NAME_ITEMS + "( " + "_id INTEGER PRIMARY KEY,"
        + "id_cat INTEGER," + "item_name TEXT," + "item_field1 TEXT,"
        + "item_field2 TEXT," + "item_field3 TEXT," + "item_notes TEXT)";
private static final String TABLE_CREATE_CATEGORIES = "CREATE TABLE "
        + TABLE_NAME_CATEGORIES + "( " + "cat_id INTEGER PRIMARY KEY,"
        + "cat_name TEXT," + "field1_name TEXT," + "field2_name TEXT,"
        + "field3_name TEXT)";
private static final String TABLE_CREATE_SETTINGS = "CREATE TABLE "
        + TABLE_NAME_SETTINGS + "( _id INTEGER PRIMARY KEY, "
        + "timeout INTEGER, " + "language TEXT, " + "install_date TEXT, "
        + "is_donor TEXT, " + "bogus TEXT)";
public String cleartext;
public String encodedtext;

mySQLiteOpenHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(TABLE_CREATE_ITEMS);
    db.execSQL(TABLE_CREATE_CATEGORIES);
    db.execSQL(TABLE_CREATE_SETTINGS);
}
4

0 回答 0