2016-08-18 6 views
0

私はSQLiteOpenHelperクラスを使用しています。
私はDBを作成し、DBからの私のすべてのデータは、アプリケーション上にあります。
後でテーブルの1つに1つの列を追加しましたが、今ではそのテーブルにno such columnと表示されています。
私はDBバージョンを更新して、アプリケーションをアンインストールしてDBバージョンを更新した後に再度インストールしましたが、それでも同じ問題が表示されます:no such columnが存在します。SQLiteOpenHelperは、DBのバージョンを変更してもDBを更新しません。

私はコラムコメント場合:タイプを、それは私が新しいファイルに全体のDBの構造を再現し、それでも同じ問題で立ち往生no such column named desc

を言います。

私を助けてください、みんな! onCreateで

public static final String TABLE_RESTAURANTS = "restaurants"; 
public static final String COLUMN_LID = "id"; 
public static final String COLUMN_LNAME = "name"; 
public static final String COLUMN_LDESC = "desc"; 
public static final String COLUMN_LTYPE = "type"; 

String CREATE_TABLE_RESTAURANTS = "CREATE TABLE " + TABLE_RESTAURANTS + "(" 
      + COLUMN_LID + " INTEGER PRIMARY KEY," + COLUMN_LNAME + "TEXT," 
      + COLUMN_LDESC + "TEXT," + COLUMN_LTYPE + "TEXT" + ")"; 
db.execSQL(CREATE_TABLE_RESTAURANTS); 

db.execSQL("DROP TABLE IF EXISTS"+ TABLE_RESTAURANTS); 
onCreate(db); 

挿入方法

public void insertRestaurantItsms(AppetiserData cartData) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COLUMN_LNAME, cartData.getName()); 
    contentValues.put(COLUMN_LDESC, cartData.getDescription()); 
    contentValues.put(COLUMN_LTYPE, cartData.getCategory()); 

    // Inserting Row 
    db.insert(TABLE_RESTAURANTS, null, contentValues); 

    db.close(); // Closing database connection 
} 

フェッチ方法

ONUPGRADEで
public List<AppetiserData> getAllDatarl(){ 
    List<AppetiserData> dataList = new ArrayList<>(); 

    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_RESTAURANTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    cursor.moveToFirst(); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      AppetiserData data = new AppetiserData(); 

      data.setName(cursor.getString(1)); 
      data.setDescription(cursor.getString(2)); 

      // Adding data to list 
      dataList.add(data); 
     } while (cursor.moveToNext()); 
    } 

    return dataList; 
} 
+0

あなたは文字列の連結のこのタイプを持ってどこ、忘れてはいけません連結文字列の前にを追加します。例:..​​. EXISTS "+ TABLE_RESTAURANTS ...、COLUMN_LNAME +" TEXT " – DsD

答えて

0

もちろん、スペースを逃してしまい、クエリの最後にセミコロンを置いていないこともありました。以下では、これらの変更をクエリに追加して投稿しました。

表クエリを作成します。

String CREATE_TABLE_RESTAURANTS = "CREATE TABLE IF NOT EXISTS " + TABLE_RESTAURANTS + " (" 
      + COLUMN_LID + " INTEGER PRIMARY KEY, " + COLUMN_LNAME + " TEXT, " 
      + COLUMN_LDESC + " TEXT, " + COLUMN_LTYPE + " TEXT " + ");"; 

ドロップ表:

db.execSQL("DROP TABLE IF EXISTS "+ TABLE_RESTAURANTS); 

希望、これは便利です:)

+0

"のようなものを意味していました。セミコロンクエリーの最後には**は絶対に役に立たない**です。 –

1
String CREATE_TABLE_RESTAURANTS = "CREATE TABLE " + TABLE_RESTAURANTS + "(" 
     + COLUMN_LID + " INTEGER PRIMARY KEY," + COLUMN_LNAME + "TEXT," 
     + COLUMN_LDESC + "TEXT," + COLUMN_LTYPE + "TEXT" + ")"; 

あなたはdescTEXTのような列を取得しないように、列名とその型の間のスペースを必要としています。

db.execSQL("DROP TABLE IF EXISTS"+ TABLE_RESTAURANTS); 

あなたはEXISTSとテーブル名の間にスペースが必要です。このSQLが実行された場合は、構文に関する例外が発生しているはずです。

+0

私がやったことは、COLUMN_LNAME +" TEXT、 " – Akash

関連する問題