2014-12-14 2 views
0

이 테이블이 안드로이드에서 전혀 생성되지 않는 문제가 있습니다.
다음은 전체 MyDBHandler입니다 :Android SQLite 테이블 문 작성

package com.example.plrardiakao; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 

public class MyDBHandler extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "MudeDB.db"; 
    public static final String TABLE_ITEMS = "Items"; 

    //helper for types 
    public static final String VARCHAR_TYPE = " VARCHAR(50)"; 
    public static final String BOOL_TYPE = " BOOLEAN"; 
    public static final String INT_TYPE = " INTEGER"; 

    //helper for column names 
    public static final String COLUMN_ENTRY_ID = "id"; //integer 
    public static final String COLUMN_TITLE = "itemtitle"; //varchar(50) 
    public static final String COLUMN_AUTHOR = "author"; //varchar(50) 
    public static final String COLUMN_CATEGORY = "category"; //varchar(50) 
    public static final String COLUMN_DATE = "date"; //int 
    public static final String COLUMN_TYPE = "type"; //varchar(50) 
    public static final String COLUMN_COUNTRY = "country"; //varchar(50) 
    public static final String COLUMN_COLOUR = "colour"; //varchar(50) 
    public static final String COLUMN_MATERIAL = "material"; //varchar(50) 
    public static final String COLUMN_FAVOURITE = "is_favourite"; //boolean 
    public static final String COLUMN_IMGRES = "imgres"; //varchar(50) 
    public static final String COLUMN_NUMBER_OF_PICS = "nr_of_pics"; // integer 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_ITEMS_TABLE = "CREATE TABLE " + TABLE_ITEMS + 
       "(" 
        + COLUMN_ENTRY_ID  + INT_TYPE +" PRIMARY KEY AUTOINCREMENT," 
        + COLUMN_TITLE   + VARCHAR_TYPE + "," 
        + COLUMN_AUTHOR  + VARCHAR_TYPE + "," 
        + COLUMN_CATEGORY  + VARCHAR_TYPE + "," 
        + COLUMN_DATE   + INT_TYPE  + "," 
        + COLUMN_TYPE   + VARCHAR_TYPE + "," 
        + COLUMN_COUNTRY  + VARCHAR_TYPE + "," 
        + COLUMN_COLOUR  + VARCHAR_TYPE + "," 
        + COLUMN_MATERIAL  + VARCHAR_TYPE + "," 
        + COLUMN_FAVOURITE  + BOOL_TYPE  + "," 
        + COLUMN_IMGRES  + VARCHAR_TYPE + "," 
        + COLUMN_NUMBER_OF_PICS + INT_TYPE + 
       ")"; 
      db.execSQL(CREATE_ITEMS_TABLE); 
    } 
    //CREATE TABLE Items(id INTEGER PRIMARY KEY AUTOINCREMENT, itemtitle VARCHAR(50),author) 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS); 
      onCreate(db); 
    } 

    public void addItem(Item item) { 

     ContentValues values = new ContentValues(); 
     values.put(COLUMN_TITLE, item.getItemTitle()); 
     values.put(COLUMN_AUTHOR, item.getAuthor()); 
     values.put(COLUMN_CATEGORY, item.getCategory()); 
     values.put(COLUMN_DATE, item.getDate()); 
     values.put(COLUMN_TYPE, item.getType()); 
     values.put(COLUMN_COUNTRY, item.getCountry()); 
     values.put(COLUMN_COLOUR, item.getColour()); 
     values.put(COLUMN_MATERIAL, item.getMaterial()); 
     values.put(COLUMN_FAVOURITE, item.getFavourite()); 
     values.put(COLUMN_IMGRES, item.getImgres()); 
     values.put(COLUMN_NUMBER_OF_PICS, item.getNumberOfPics()); 

     SQLiteDatabase db = this.getWritableDatabase(); 

     db.insert(TABLE_ITEMS, null, values); 
     db.close(); 

    } 

    public int findPictureNumber(String itemtitle) { 
     String query = "SELECT nr_of_pics FROM " + TABLE_ITEMS + " WHERE " +COLUMN_TITLE + "=" + "'"+itemtitle+"'" ; 
     SQLiteDatabase db = this.getWritableDatabase(); 

     Cursor cursor = db.rawQuery(query, null); 


     int PicsNumber=0; 

     if (cursor.moveToFirst()) { 
      cursor.moveToFirst(); 
      PicsNumber=Integer.parseInt(cursor.getString(0)); 
      cursor.close(); 
      return PicsNumber; 
     } else { 
      //wtf? 
     } 
      db.close(); 
      return 0; 
    } 

    public void changeFavourite(String itemtitle, boolean isFavourite) 
    { 

     SQLiteDatabase db = this.getWritableDatabase(); 
     String strSQL = "UPDATE "+TABLE_ITEMS+" SET "+COLUMN_FAVOURITE +"="+ isFavourite +" WHERE columnId = "+ "'"+itemtitle+"'"; 

     db.execSQL(strSQL); 

    } 

    public String AuthorName(String itemtitle) { 
     String query = "SELECT " +COLUMN_AUTHOR+ " FROM " + TABLE_ITEMS + " WHERE " +COLUMN_TITLE + "=" + "'"+itemtitle+"'" ; 

     SQLiteDatabase db = this.getWritableDatabase(); 

     Cursor cursor = db.rawQuery(query, null); 

     String authorname="error1"; 

     if (cursor.moveToFirst()) { 
      cursor.moveToFirst(); 
      authorname=cursor.getString(0); 
      cursor.close(); 
     } else { 
      //wtf? 
     } 
      db.close(); 
     return authorname; 
    } 

} 

아마 어딘가에 CREATE_TABLE에서, 오류가 있습니다,하지만 난 어디 모르겠어요. 테이블이 생성되지 않았고, 이전의 자리 표시 자 테이블이 있으며, 실행시 열의 일부가 존재하지 않는다는 오류가 표시됩니다. 뭐가 문제 야?

답변

0

오류를 게시하지 않은 이유는 무엇입니까? 게시 할 수 있습니까? 또한 db 테이블을 변경 한 경우 데이터베이스 버전을 늘려야합니다.

+0

DB 버전! 그게 다야! 정말 고맙습니다! – Sheenah

0

Android 휴대 전화의 앱 관리자로 이동하십시오. 앱과 관련된 모든 데이터를 삭제하십시오. 그런 다음 앱을 실행 해보십시오. 또한 CREATE TABLE 문에는 열 이름과 열 유형 사이에 공백이 있어야합니다.

+0

가상 머신에서 Genymotion을 사용하여 수행합니다. 어떻게 거기에 그것을 할 수 있습니까? 헬퍼 문자열에 공백이 있습니다. – Sheenah

+0

이것 좀 봐 http://stackoverflow.com/questions/22835372/clean-genymotion-virtual-devices-local-cache – Praveen

+0

고마워, 그것은 DB 버전이었다. 어쨌든 시간을내어 주셔서 대단히 감사합니다. – Sheenah