, странная проблема, которая кажется обычной, но я не могу найти правильное решение. Может быть, вы, ребята, можете помочь мне выяснить, где я ошибаюсь.Несколько таблиц на БД Android - нет такой таблицы
Это мой общий DB адаптер класса
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, который вызывает DB
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 (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
Я прочитал много сообщений и прошел через многие форумы. Пример, который я использовал для создания этого можно найти здесь:
Multiple Table SQLite DB Adapter(s) in Android?
Я проверил и перепроверил мою кодировку. Я подозреваю, что я не называю commonDBclass на методе создания, но я не могу понять, как это сделать. Пожалуйста помоги.
спасибо.
, если после этого вы добавили таблицу, вам нужно увеличить версию db и реализовать onUpgrade (...), чтобы были созданы новые таблицы. – drunkenRabbit
У вас нет таблицы под названием '' etitarifftable''. Только '' etisalatdb'' и '' dudatabase''. Может ли это быть причиной? – harism
, даже если я удалил весь db? Я попробовал onupgrade и версии, ничего не произошло. Поэтому я удалил БД и попытался ... проделать эту проблему.DB, но нет таблиц. –