我目前正在开发一个 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);
}