У меня была одна БД, потом пришлось создать еще одну для других целей. После создания поменял DATEBASE_VERSION
, но все ровно ошибка:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.fedia.regestration, PID: 2593
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app.MainActivity}: android.database.sqlite.SQLiteException: table Contact already exists (code 1): , while compiling: CREATE TABLE Contact ( Name TEXT, Color TEXT, Price TEXT)
Caused by: android.database.sqlite.SQLiteException: table ContactFruit already exists (code 1): , while compiling: CREATE TABLE ContactFruit ( Name TEXT, Color TEXT, Price TEXT)
БД 1:
public static final String TAG = DBHelper.class.getSimpleName();
public static final int DATEBASE_VERSION = 3;
public static final String DATEBASE_NAME = "ContactDB";
public static final String TABLE_CONTACT = "Contact";
public static final String KEY_ID = "ID";
public static final String KEY_NAME = "Name";
public static final String KEY_LOGIN = "Login";
public static final String KEY_PASS = "Pass";
public int countUser;
public DBHelper(Context context) {
super(context, DATEBASE_NAME, null, DATEBASE_VERSION);
}
public static final String CREATE_TABLE_USERS = "CREATE TABLE " + TABLE_CONTACT + " ( "
+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ KEY_NAME + " TEXT, "
+ KEY_LOGIN + " TEXT, "
+ KEY_PASS + " TEXT)";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_USERS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACT);
onCreate(db);
}
БД 2:
public static final int DATEBASE_VERSION = 3;
public static final String DATEBASE_NAME_FRUIT = "FruitBD";
public static final String TABLE_CONTACT_FRUIT = "ContactFruit";
public static final String KEY_NAME_FRUIT = "Name";
public static final String KEY_COLOR = "Color";
public static final String KEY_PRICE = "Price";
public DBHelperFruit(Context context) {
super(context, DATEBASE_NAME_FRUIT, null, DATEBASE_VERSION);
}
public static final String CREATE_TABLE_FRUIT = "CREATE TABLE " + TABLE_CONTACT_FRUIT + " ( "
+ KEY_NAME_FRUIT + " TEXT, "
+ KEY_COLOR + " TEXT, "
+ KEY_PRICE + " TEXT)";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_FRUIT);
onCreate(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACT_FRUIT);
onCreate(db);
}
В ошибке еще указано, что проблема и в этом методе:
@Override
public List<Fruit> getAllFruits() {
List<Fruit> fruitList = new ArrayList<Fruit>();
String selectQuery = "SELECT * FROM " + TABLE_CONTACT_FRUIT;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Fruit fruit = new Fruit();
fruit.setName(cursor.getString(0));
fruit.setColor(cursor.getString(1));
fruit.setPrice(Integer.parseInt(cursor.getString(2)));
fruitList.add(fruit);
} while (cursor.moveToNext());
}
return fruitList;
}
Метод onCreate(...)
вызывается при создании базы данных и служит для ее конфигурации (создания таблиц и т.п.).
У Вас этот метод выглядит следующим образом:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_FRUIT);
onCreate(db);
}
В этом методе Вы создаете таблицу и зачем-то снова явно вызываете метод onCreate(...)
, создавая рекурсию. При этом повторно выполняется запрос на создание таблицы, который и вызывает исключение:
SQLiteException: table ContactFruit already exists
так как данная таблица уже существует (была создана при первом вызове метода onCreate(...)
).
Решить данную проблему можно убрав вызов onCreate(db);
из метода onCreate(...)
.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Класс в котором формируется объект ProcessBuilder:
Есть ViewPager в котором RecyclerView формируется список, используется FragmentStatePagerAdapter который сразу формирует несколько фрагментовСитуация такая,...
Доброй ночиРисую линию из квадратов jbutton на jpanel, когда собирается - линию убираю, jbutton - те что выше отпускаю