有一个奇怪的问题,这似乎很常见,但我无法找到合适的解决方案。也许你们可以帮我弄清楚我哪里出错了。
这是我的通用数据库适配器类
package com.example.mobilebillforecaster;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class CommonDBclass {
public static final String DATABASE_NAME = "mbfDB";
public static final int DATABASE_VERSION = 1;
public static final String CREATE_ETI_TABLE =
"CREATE TABLE etisalatdb (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ EtiTariffDB.KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ EtiTariffDB.KEY_PACKNAME + " TEXT, " + EtiTariffDB.KEY_PACKRENT
+ " INTEGER, " + EtiTariffDB.KEY_SIMRATE + " INTEGER, "
+ EtiTariffDB.KEY_NATMINSBUN + " INTEGER, "
+ EtiTariffDB.KEY_NATMINSRATE + " INTEGER, "
+ EtiTariffDB.KEY_INTMINSBUN + " INTEGER, "
+ EtiTariffDB.KEY_INTMINSRATE + " INTEGER, "
+ EtiTariffDB.KEY_NATSMSBUN + " INTEGER, "
+ EtiTariffDB.KEY_NATSMSRATE + " INTEGER, "
+ EtiTariffDB.KEY_INTSMSBUN + " INTEGER, "
+ EtiTariffDB.KEY_INTSMSRATE + " INTEGER, "
+ EtiTariffDB.KEY_MMSBUN + " INTEGER, " + EtiTariffDB.KEY_MMSRATE
+ " INTEGER, " + EtiTariffDB.KEY_DATALBUN + " INTEGER, "
+ EtiTariffDB.KEY_DATALRATE + " INTEGER" + ");";
public static final String CREATE_DU_TABLE =
"CREATE TABLE dudatabase(_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ DuTariffDB.KEY_PACKNAME + " TEXT, " + DuTariffDB.KEY_PACKRENT
+ " INTEGER, " + DuTariffDB.KEY_NATMINSRATE + " INTEGER, "
+ DuTariffDB.KEY_NATMOBRATE + " INTEGER, "
+ DuTariffDB.KEY_INTMINSRATE + " INTEGER, "
+ DuTariffDB.KEY_NATSMSRATE + " INTEGER, "
+ DuTariffDB.KEY_INTSMSRATE + " INTEGER, "
+ DuTariffDB.KEY_DATALBUN + " INTEGER, " + DuTariffDB.KEY_DATALRATE
+ " INTEGER" + ");";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public CommonDBclass(Context ctx) {
this.context = ctx;
this.DBHelper = new DatabaseHelper(this.context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_ETI_TABLE);
db.execSQL(CREATE_DU_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public CommonDBclass open() throws SQLException {
this.db = this.DBHelper.getWritableDatabase();
return this;
}
public void close() {
this.DBHelper.close();
}
}
这是我的适配器之一
package com.example.mobilebillforecaster;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class EtiTariffDB {
public static final String KEY_ROWID = "_id";
public static final String KEY_PACKNAME = "pack_name";
public static final String KEY_PACKRENT = "pack_rent";
public static final String KEY_SIMRATE = "sim_rate";
public static final String KEY_NATMINSBUN = "natmins_bun";
public static final String KEY_NATMINSRATE = "natmins_rate";
public static final String KEY_INTMINSBUN = "intmins_bun";
public static final String KEY_INTMINSRATE = "intmins_rate";
public static final String KEY_NATSMSBUN = "natsms_bun";
public static final String KEY_NATSMSRATE = "natsms_rate";
public static final String KEY_INTSMSBUN = "intsms_bun";
public static final String KEY_INTSMSRATE = "intsms_rate";
public static final String KEY_MMSBUN = "mms_bun";
public static final String KEY_MMSRATE = "mms_rate";
public static final String KEY_DATALBUN = "datal_bun";
public static final String KEY_DATALRATE = "datal_rate";
private static final String DATABASE_TABLE = "etitarifftable";
private DbHelper ourHelper;
private final Context cctext;
private SQLiteDatabase ourDatabase;
private static class DbHelper extends SQLiteOpenHelper {
DbHelper(Context ourContext) {
super(ourContext, CommonDBclass.DATABASE_NAME, null,
CommonDBclass.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
public EtiTariffDB(Context ctx) {
this.cctext = ctx;
}
public EtiTariffDB open() {
this.ourHelper = new DbHelper(this.cctext);
this.ourDatabase = this.ourHelper.getWritableDatabase();
return this;
}
public void close() {
this.ourHelper.close();
}
public long createEtiTariff(String packname, String packrent,
String simrent, String natbun, String natrate, String intbundle,
String intrate, String natsmsbun, String natsmsrate,
String intsmsbun, String intsmsrate, String mmsbun, String mmsrate,
String datalbun, String datalrate) {
ContentValues cv = new ContentValues();
cv.put(KEY_PACKNAME, packname);
cv.put(KEY_PACKRENT, packrent);
cv.put(KEY_SIMRATE, simrent);
cv.put(KEY_NATMINSBUN, natbun);
cv.put(KEY_NATMINSRATE, natrate);
cv.put(KEY_INTMINSBUN, intbundle);
cv.put(KEY_INTMINSRATE, intrate);
cv.put(KEY_NATSMSBUN, natsmsbun);
cv.put(KEY_NATSMSRATE, natsmsrate);
cv.put(KEY_INTSMSBUN, intsmsbun);
cv.put(KEY_INTSMSRATE, intsmsrate);
cv.put(KEY_MMSBUN, mmsbun);
cv.put(KEY_MMSRATE, mmsrate);
cv.put(KEY_DATALBUN, datalbun);
cv.put(KEY_DATALRATE, datalrate);
return this.ourDatabase.insert(DATABASE_TABLE, null, cv);
}
这是我调用数据库的 java 文件的一部分
EtiTariffDB etisalatDB = new EtiTariffDB(this);
etisalatDB.open();
etisalatDB.createEtiTariff(etipackname, etipackrent, etisimrent,
etinatbun, etinatrate, etiintbundle, etiintrate,
etinatsmsbundle, etinatsmsrate, etiintsmsbundle,
etiintsmsrate,etimmsbundle, etimmsrate,
etidatalocalbundle, etidatalocalrate);
etisalatDB.close();
我得到的错误是:
04-10 20:17:47.958: E/SQLiteLog(30526): (1) no such table: etitarifftable
04-10 20:17:48.078: E/SQLiteDatabase(30526): Error inserting natmins_rate=0.30 pack_name=Corporate package natsms_bun=200 mms_rate=0.45 mms_bun=- intsms_rate=0.60 natsms_rate=0.18 intsms_bun=- sim_rate=29 intmins_bun=100 datal_rate=0.1 datal_bun=2000 intmins_rate=1.10 natmins_bun=100 pack_rent=249
04-10 20:17:48.078: E/SQLiteDatabase(30526): android.database.sqlite.SQLiteException: no such table: etitarifftable (code 1): , while compiling: INSERT INTO etitarifftable(natmins_rate,pack_name,natsms_bun,mms_rate,mms_bun,intsms_rate,natsms_rate,intsms_bun,sim_rate,intmins_bun,datal_rate,datal_bun,intmins_rate,natmins_bun,pack_rent) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
我读过很多帖子,也浏览过很多论坛。我用来创建这个的例子可以在这里找到:
我已经检查并重新检查了我的编码。我怀疑我没有在 create 方法上调用 commonDBclass,但我不知道如何。请帮忙。
谢谢。