2015-09-09 2 views
3

У меня есть очень прямая ошибка. В моей SQLiteHelper создать 2 таблицы:Ошибка Вставка в несколько таблиц SQLite Android

import android.content.ContentValues; 
import android.database.sqlite.SQLiteDatabase; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.support.annotation.Nullable; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import com.letscook.thanhta.letscook.R; 
import java.io.ByteArrayOutputStream; 

public class SQLiteHelper extends SQLiteOpenHelper { 

public SQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "CookBook.db"; 

protected static final String RECIPE_CATEGORY = "RECIPE_CATEGORY"; 
protected static final String INGREDIENT_TYPE = "INGREDIENT_TYPE"; 

public static final String CREATE_RECIPE_CATEGORY = "create table if not exists " 
     + RECIPE_CATEGORY + 
     "(Recipe_Category_id INTEGER PRIMARY KEY," + 
     "Recipe_Category_name TEXT, " + 
     "Description TEXT);"; 
public static final String CREATE_INGREDIENT_TYPE= "create table if not exists " + 
     INGREDIENT_TYPE + 
     "(Ingredient_type_id INTEGER PRIMARY KEY ," + 
     "Ingredient_type_name TEXT);"; 
@Override 
public void onCreate(SQLiteDatabase db) { 
    try{ 
     db = getWritableDatabase(); 
     db.execSQL(CREATE_RECIPE_CATEGORY); 
     db.execSQL(CREATE_INGREDIENT_TYPE); 
     db.close();} 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)  {   
    db.execSQL("drop table if exists " + RECIPE_CATEGORY); 
    db.execSQL("drop table if exists " + INGREDIENT_TYPE); 
    onCreate(db); 
} 

В MainActivity я вставить в эти 2 таблицы

public class DataBaseInsertActivity extends ActionBarActivity { 

    ContentValues values = new ContentValues(); 
    private void Insert(ContentValues values, String table) { 
     db.insert(table,null,values); 
    } 

    public void doInsertRECIPE_CATEGORY(int id, String name, String description){ 
    values.put("Recipe_Category_id", id); 
    values.put("Recipe_Category_name",name); 
    values.put("Description", description); 
    Insert(values, "RECIPE_CATEGORY"); 
    } 

    public void doInsertINGREDIENT_TYPE(int id, String name){ 
    values.put("Ingredient_type_id",id); 
    values.put("Ingredient_type_name",name); 
    Insert(values, "INGREDIENT_TYPE"); 
    } 

    SQLiteDatabase db; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_data_base); 
     //CREATE database 
     SQLiteHelper helper = new SQLiteHelper(this); 
     db = helper.getWritableDatabase(); 
     } 
doInsertRECIPE_CATEGORY(0, "All", "All recipes"); 
    doInsertRECIPE_CATEGORY(1, "Snack", "Fast and fun!"); 
    doInsertINGREDIENT_TYPE(0, "meat"); 
    doInsertINGREDIENT_TYPE(1, "fish"); 
}} 

ОШИБКА:

09-09 18:50:58.494 12358-12358/com.letscook.thanhta.letscook E/SQLiteLog﹕ (1) near "Recipe_id": syntax error 
09-09 18:50:58.518 12358-12358/com.letscook.thanhta.letscook E/SQLiteLog﹕ (1) no such table: INGREDIENT_TYPE 
09-09 18:50:58.518 12358-12358/com.letscook.thanhta.letscook E/SQLiteDatabase﹕ Error inserting Ingredient_type_name=meat Description=Fast and fun! Ingredient_type_id=0 Recipe_Category_name=Snack Recipe_Category_id=1 
    android.database.sqlite.SQLiteException: no such table: INGREDIENT_TYPE (code 1): , while compiling: INSERT INTO INGREDIENT_TYPE(Ingredient_type_name,Description,Ingredient_type_id,Recipe_Category_name,Recipe_Category_id) VALUES (?,?,?,?,?) 

Я не знаю, почему «Recipe_Category_name »и« Recipe_Category_id »все еще находятся в« Вставка »при вставке во вторую таблицу.

+0

Рассматривали ли вы с использованием библиотеки как ActiveAndroid для этой БД потребностей? – Eenvincible

ответ

0

Я нашел решение! ошибка причина это потому, что в классе DataBaseInsertActivity

ContentValues values = new ContentValues(); 

был поставлен в onCreate, он должен быть помещен в отдельный класс, как это:

public void doInsertRECIPE_CATEGORY(int id, String name, String  description) { 
ContentValues values = new ContentValues(); 
values.put("Recipe_Category_id", id); 
values.put("Recipe_Category_name",name); 
values.put("Description", description); 
Insert(values, "RECIPE_CATEGORY"); 
} 
public void doInsertINGREDIENT_TYPE(int id, String name){ 
ContentValues values = new ContentValues(); 
values.put("Ingredient_type_id",id); 
values.put("Ingredient_type_name",name); 
Insert(values, "INGREDIENT_TYPE"); 
} 
0

Вы должны позвонить по телефону getWritableDatabase() в SQLiteDatabaseHelperonCreate(). Это приведет к ошибке с «вызванным рекурсивным» исключением.

В то время как там, удалите close() и try - catch. Если есть проблема, ее нужно бросить и не игнорировать.

Удалите и переустановите приложение, чтобы вызвать еще раз вызывающий onCreate().

Смежные вопросы