2015-06-12 4 views
-3

сообщение об ошибке:ошибка SQLite в базе данных

06-12 18:11:25.900: E/SQLiteLog(823): (1) near "refingredient": syntax error 
06-12 18:11:25.990: E/AndroidRuntime(823): FATAL EXCEPTION: main 
06-12 18:11:25.990: E/AndroidRuntime(823): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.khalil.dabaresto/com.khalil.dabaresto.MainActivity}: android.database.sqlite.SQLiteException: near "refingredient": syntax error (code 1): , while compiling: CREATE TABLE plat(idplat INTEGER PRIMARY KEY, platname TEXT, prixplat INTEGER, refcategorie INTEGER NOT NULL, FOREIGN KEY (refcategorie) REFERENCES categorie (idcategorie)refingredient INTEGER NOT NULL, FOREIGN KEY(refingredient) REFERENCES ingredient (idingredient))); 

вы могли бы помочь мне, пожалуйста, я не могу обнаружить свою ошибку

package com.khalil.dabaresto; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.Cursor; 
import android.widget.Spinner; 
import android.content.Context; 
import android.content.ContentValues; 


public class MyDBHandler extends SQLiteOpenHelper{ 
private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "resto.db"; 
private static final String TABLE_RESTAURANT = "restaurant"; 
private static final String COLUMN_ID = "id"; 
private static final String COLUMN_RESTAURANTNAME = "restaurantname"; 
private static final String COLUMN_REFVILLE = "refville"; 

private static final String TABLE_MENU ="menu"; 
private static final String COLUMN_IDMENU ="idmenu"; 
private static final String COLUMN_MENUNAME ="menuname"; 
private static final String COLUMN_PRIXMENU = "prixmenu"; 
private static final String COLUMN_REFRESTAURANT ="refrestaurant"; 

private static final String TABLE_PLAT ="plat"; 
private static final String COLUMN_IDPLAT ="idplat"; 
private static final String COLUMN_PLATNAME ="platname"; 
private static final String COLUMN_PRIXPLAT ="prixplat"; 
private static final String COLUMN_REFCATEGORIE ="refcategorie"; 
private static final String COLUMN_REFINGREDIENT ="refingredient"; 

private static final String TABLE_INGREDIENT ="ingredient"; 
private static final String COLUMN_IDINGREDIENT ="idingredient"; 
private static final String COLUMN_INGREDIENTNAME ="ingredientname"; 

private static final String TABLE_CATEGORIE ="categorie"; 
private static final String COLUMN_IDCATEGORIE ="idcategorie"; 
private static final String COLUMN_CATEGORIENAME ="categoriename"; 

private static final String TABLE_VILLE ="ville"; 
private static final String COLUMN_IDVILLE ="idville"; 
private static final String COLUMN_VILLENAME ="villename"; 


public MyDBHandler(Context context, String name, CursorFactory factory, 
     int version) { 
    super(context, DATABASE_NAME, factory, DATABASE_VERSION); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String query ="CREATE TABLE " + TABLE_RESTAURANT + "(" + 
      COLUMN_ID + " INTEGER PRIMARY KEY, " + 
      COLUMN_RESTAURANTNAME + " TEXT " + 
      ")"; 
    db.execSQL(query); 

    String query1 = "CREATE TABLE " + TABLE_MENU + "(" + 
      COLUMN_IDMENU + " INTEGER PRIMARY KEY, " + 
      COLUMN_MENUNAME + " TEXT, " + 
      COLUMN_PRIXMENU + " INTEGER, " + 
      COLUMN_REFRESTAURANT + " INTEGER NOT NULL, FOREIGN KEY ("+COLUMN_REFRESTAURANT+") REFERENCES "+TABLE_RESTAURANT+" ("+COLUMN_ID+"));"; 
    db.execSQL(query1); 

    String query2 = " CREATE TABLE " + TABLE_PLAT + "(" + 
      COLUMN_IDPLAT + " INTEGER PRIMARY KEY, " + 
      COLUMN_PLATNAME + " TEXT, " + 
      COLUMN_PRIXPLAT + " INTEGER, " + 
      COLUMN_REFCATEGORIE + " INTEGER NOT NULL, " +" FOREIGN KEY ("+COLUMN_REFCATEGORIE+") REFERENCES " +TABLE_CATEGORIE+" ("+COLUMN_IDCATEGORIE ")" + 
      COLUMN_REFINGREDIENT + " INTEGER NOT NULL, " +" FOREIGN KEY("+COLUMN_REFINGREDIENT+ ") REFERENCES " +TABLE_INGREDIENT+" ("+COLUMN_IDINGREDIENT+"));"; 
    db.execSQL(query2); 

    String query3 ="CREATE TABLE" + TABLE_INGREDIENT + "(" + 
      COLUMN_IDINGREDIENT + " INTEGER PRIMARY KEY, " + 
      COLUMN_INGREDIENTNAME +" TEXT" + 
      ");"; 
    db.execSQL(query3); 

    String query4 = "CREATE TABLE" + TABLE_CATEGORIE + "(" +  
      COLUMN_IDCATEGORIE + " INTEGER PRIMARY KEY, " + 
      COLUMN_CATEGORIENAME +" TEXT" + 
      ");"; 
    db.execSQL(query4); 

    String query5 = "CREATE TABLE" + TABLE_VILLE + "(" +  
      COLUMN_IDVILLE + " INTEGER PRIMARY KEY, " + 
      COLUMN_VILLENAME +" TEXT" + 
      ");"; 
    db.execSQL(query5); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    db.execSQL("DROP TABLE IF EXISTS " + TABLE_RESTAURANT); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_MENU); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_PLAT); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_INGREDIENT); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CATEGORIE); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_VILLE); 
    onCreate(db); 

} 

public void addRestaurant(Restaurant restaurant,Ville ville){ 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_RESTAURANTNAME, restaurant.get_restaurantname()); 
    values.put(COLUMN_REFVILLE,ville.get_idville()); 
    SQLiteDatabase db= getWritableDatabase(); 
    db.insert(TABLE_RESTAURANT, null, values); 
    db.close(); 
} 

public void addMenu(Menu menu,Restaurant restaurant){ 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_MENUNAME, menu.get_menuname()); 
    values.put(COLUMN_PRIXMENU,menu.get_prixmenu()); 
    values.put(COLUMN_REFRESTAURANT, restaurant.get_id()); 
    SQLiteDatabase db= getWritableDatabase(); 
    db.insert(TABLE_MENU, null, values); 
    db.close(); 
} 

public void addPlat(Plat plat,Categorie categorie,Ingredient ingredient){ 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_PLATNAME, plat.get_platname()); 
    values.put(COLUMN_PRIXPLAT,plat.get_prixplat()); 
    values.put(COLUMN_REFCATEGORIE, categorie.get_idcategorie()); 
    values.put(COLUMN_REFINGREDIENT, ingredient.get_idingredient()); 
    SQLiteDatabase db= getWritableDatabase(); 
    db.insert(TABLE_PLAT, null, values); 
    db.close(); 
} 

public void addIngredient(Ingredient ingredient){ 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_INGREDIENTNAME, ingredient.get_ingredientname()); 
    SQLiteDatabase db= getWritableDatabase(); 
    db.insert(TABLE_INGREDIENT, null, values); 
    db.close(); 
} 

public void addCategorie(Categorie categorie){ 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_CATEGORIENAME, categorie.get_categoriename()); 
    SQLiteDatabase db= getWritableDatabase(); 
    db.insert(TABLE_CATEGORIE, null, values); 
    db.close(); 
} 

public void addVille(Ville ville){ 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_VILLENAME, ville.get_villename()); 
    SQLiteDatabase db= getWritableDatabase(); 
    db.insert(TABLE_VILLE, null, values); 
    db.close(); 
} 

public void deleteRestaurant(String restaurantName){ 
    SQLiteDatabase db=getWritableDatabase(); 
    db.execSQL("DELETE FROM " + TABLE_RESTAURANT + " WHERE " + COLUMN_RESTAURANTNAME + "=\"" + restaurantName + "\";"); 

} 

public void deletePlat(String platName){ 
    SQLiteDatabase db=getWritableDatabase(); 
    db.execSQL("DELETE FROM " +TABLE_PLAT + "WHERE " + COLUMN_PLATNAME+ "=\""+platName+"\";"); 

} 
public String databaseToString(){ 
    String dbString = ""; 
    SQLiteDatabase db =getWritableDatabase(); 
    String query ="SELECT * FROM"+TABLE_RESTAURANT + "WHERE 1"; 
    Cursor c=db.rawQuery(query, null); 
    c.moveToFirst(); 


    while (!c.isAfterLast()){ 
     if(c.getString(c.getColumnIndex(" restaurantname"))!=null){ 
     dbString += c.getString(c.getColumnIndex(" restaurantname")); 
     dbString +="\n"; 
     } 
    } 

db.close(); 
    return dbString; 
} 

public String databaseToString1(){ 
    String dbString1 = ""; 
    SQLiteDatabase db1 =getWritableDatabase(); 
    String query1 ="SELECT * FROM"+TABLE_MENU + "WHERE 1"; 
    Cursor c1=db1.rawQuery(query1, null); 
    c1.moveToFirst(); 


    while (!c1.isAfterLast()){ 
     if(c1.getString(c1.getColumnIndex("menuname"))!=null){ 
      dbString1 += c1.getString(c1.getColumnIndex("menuname")); 
      dbString1 +="\n"; 
     } 
    } 

db1.close(); 
    return dbString1; 
} 



public String databaseToString2(){ 
    String dbString2 = ""; 
    SQLiteDatabase db2 =getWritableDatabase(); 
    String query2 ="SELECT * FROM"+TABLE_PLAT + "WHERE 1"; 
    Cursor c2=db2.rawQuery(query2, null); 
    c2.moveToFirst(); 


    while (!c2.isAfterLast()){ 
     if(c2.getString(c2.getColumnIndex("platname"))!=null){ 
     dbString2 += c2.getString(c2.getColumnIndex("platname")); 
     dbString2 +="\n"; 
     } 
    } 

db2.close(); 
    return dbString2; 
} 
public String databaseToString3(){ 
    String dbString3 = ""; 
    SQLiteDatabase db3 =getWritableDatabase(); 
    String query3 ="SELECT * FROM"+TABLE_INGREDIENT + "WHERE 1"; 
    Cursor c3=db3.rawQuery(query3, null); 
    c3.moveToFirst(); 


    while (!c3.isAfterLast()){ 
     if(c3.getString(c3.getColumnIndex("ingredientname"))!=null){ 
     dbString3 += c3.getString(c3.getColumnIndex("ingredientname")); 
     dbString3 +="\n"; 
     } 
    } 

db3.close(); 
    return dbString3; 
} 
public String databaseToString4(){ 
    String dbString4 = ""; 
    SQLiteDatabase db4 =getWritableDatabase(); 
    String query4 ="SELECT * FROM"+TABLE_CATEGORIE + "WHERE 1"; 
    Cursor c4=db4.rawQuery(query4, null); 
    c4.moveToFirst(); 


    while (!c4.isAfterLast()){ 
     if(c4.getString(c4.getColumnIndex("categoriename"))!=null){ 
     dbString4 += c4.getString(c4.getColumnIndex("categoriename")); 
     dbString4 +="\n"; 
     } 
    } 

db4.close(); 
    return dbString4; 
} 
public String databaseToString5(){ 
    String dbString5 = ""; 
    SQLiteDatabase db5 =getWritableDatabase(); 
    String query5 ="SELECT * FROM"+TABLE_VILLE + "WHERE 1"; 
    Cursor c5=db5.rawQuery(query5, null); 
    c5.moveToFirst(); 


    while (!c5.isAfterLast()){ 
     if(c5.getString(c5.getColumnIndex("villename"))!=null){ 
     dbString5 += c5.getString(c5.getColumnIndex("villename")); 
     dbString5 +="\n"; 
     } 
    } 

db5.close(); 
    return dbString5; 
} 
} 
+0

Просто посмотрите на исключение или, более конкретно, на QUERY, отображаемое в исключении. Вам не хватает запятой прямо перед 'refingredient'. –

+0

Пожалуйста, прочтите http://stackoverflow.com/help/mcve и отредактируйте свой вопрос. – kebs

ответ

0

Вы пропускаете запятую, которая вызывает ошибку синтаксиса. Вот скорректированный код:

String query2 = " CREATE TABLE " + TABLE_PLAT + "(" + 
     COLUMN_IDPLAT + " INTEGER PRIMARY KEY, " + 
     COLUMN_PLATNAME + " TEXT, " + 
     COLUMN_PRIXPLAT + " INTEGER, " + 
     COLUMN_REFCATEGORIE + " INTEGER NOT NULL, " +" FOREIGN KEY ("+COLUMN_REFCATEGORIE+") REFERENCES " +TABLE_CATEGORIE+" ("+COLUMN_IDCATEGORIE ")," + 
     // The missing comma was here:...............................................................................................................^ 
     COLUMN_REFINGREDIENT + " INTEGER NOT NULL, " +" FOREIGN KEY("+COLUMN_REFINGREDIENT+ ") REFERENCES " +TABLE_INGREDIENT+" ("+COLUMN_IDINGREDIENT+"));"; 
db.execSQL(query2); 
+0

даже если добавить запятую я получил ту же ошибку –

+0

даже если добавить запятую я получил ту же ошибку –

+0

Строка QUERY2 = «CREATE TABLE» + TABLE_PLAT + «(» + \t COLUMN_IDPLAT + «INTEGER PRIMARY KEY» + \t \t \t COLUMN_PLATNAME + "Текст" + \t COLUMN_PRIXPLAT + "Integer," + \t \t \t COLUMN_REFCATEGORIE + "INTEGER NOT NULL," + "FOREIGN KEY ("+ COLUMN_REFCATEGORIE +") СПИСОК ЛИТЕРАТУРЫ "+ TABLE_CATEGORIE +"(" + COLUMN_IDCATEGORIE + ")," + \t \t \t COLUMN_REFINGREDIENT + "INTEGER NOT NULL," + "FOREIG N KEY ("+ COLUMN_REFINGREDIENT +") ССЫЛКИ "+ TABLE_INGREDIENT +" ("+ COLUMN_IDINGREDIENT +")); "; \t db.execSQL (query2); –

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