2016-08-09 8 views
1

私はnotetakingアプリケーションでSQLiteデータベースを使用していますが正常に動作しています。私は、ノートのタイトルのために別の列を追加したい、これが私の新しいコードの結果です:SQLiteデータベースに別の列を追加するAndroid

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

// class to create the sqlite database 
public class DBOpenHelper extends SQLiteOpenHelper { 

    // database name and version 
    // name needs .db 
    private static final String DATABASE_NAME = "notes.db"; 
    private static final int DATABASE_VERSION = 1; 

    // database table and columns 
    // id will be primary key and content provider will expect it to have "_" in front 
    public static final String TABLE_NOTES = "notes"; 
    public static final String NOTE_ID = "_id"; 
    public static final String NOTE_TITLE = "noteTitle"; 
    public static final String NOTE_BODY = "noteBody"; 
    public static final String NOTE_CREATED = "noteCreated"; 

    public static final String[] ALL_COLUMNS = 
      {NOTE_ID, NOTE_TITLE, NOTE_BODY, NOTE_CREATED}; 
    // SQL to create table 
    private static final String TABLE_CREATE = 
      "CREATE TABLE " + TABLE_NOTES + " (" + 
        NOTE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        NOTE_TITLE + " TEXT, " + 
        NOTE_BODY + " TEXT, " + 
        NOTE_CREATED + " TEXT default CURRENT_TIMESTAMP" + 
        ")"; 

    // constructor 
    public DBOpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // called the first time this class is instantiated 
    // creates database structure if it does not exist yet 
    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     sqLiteDatabase.execSQL(TABLE_CREATE); 
    } 

    // called when database version is changed and 
    // user opens app first time after database updated 
    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS" + TABLE_NOTES); 
     onCreate(sqLiteDatabase); 
    } 
} 

これは私の古いコード(あまりないが、変更されている)です。私がしたすべてはNOTE_TITLEの列に追加しました:

08-09 19:13:19.561 10539-10539/com.sample.mynote I/art: Late-enabling -Xcheck:jni 08-09 19:13:19.592 10539-10539/com.sample.mynote I/HyLog: I : openReadStream, /data/font/config/sfconfig.dat, case (2) 08-09 19:13:19.592 10539-10539/com.sample.mynote D/HyLog: D: Wrong tag (927 : loadPreData() : frameworks/base/core/jni/android/graphics/TypefaceHyFontManager.cpp) 08-09 19:13:19.592 10539-10539/com.beauty.sample.mynote I/HyLog: I : openReadStream, /data/font/config/sfconfig.dat, case (2) 08-09 19:13:19.605 10539-10539/com.beauty.sample.mynote W/System: ClassLoader referenced unknown path: /data/app/com.sample.mynote-1/lib/arm64 08-09 19:13:19.882 10539-10539/com.sample.mynote W/System: ClassLoader referenced unknown path: /data/app/com.sample.mynote-1/lib/arm64 08-09 19:13:19.997 10539-10539/com.sample.mynote W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 08-09 19:13:20.012 10539-10539/com.beauty.sample.mynote I/PhoneWindow: [generateLayout] setColorNavigationBar => color=0x ff000001 08-09 19:13:20.029 10539-10539/com.sample.mynote D/PhoneWindowEx: Ex2. SystemProperties.get result >> #ff000000 08-09 19:13:20.029 10539-10539/com.sample.mynote D/PhoneWindowEx: [PWEx][generateLayout] setNavigationBarColor2 : colors=0xff000000 08-09 19:13:20.029 10539-10539/com.sample.mynote I/PhoneWindow: [setNavigationBarColor2] color=0x ff000000 08-09 19:13:20.137 10539-10586/com.sample.mynote E/SQLiteLog: (1) no such column: noteTitle 


--------- beginning of crash 08-09 19:13:20.139 10539-10586/com.sample.mynote E/AndroidRuntime: FATAL EXCEPTION: ModernAsyncTask #1 
                       Process: com.sample.mynote, PID: 10539 
                       java.lang.RuntimeException: An error occurred while executing doInBackground() 
                        at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:143) 
                        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
                        at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
                        at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                        at java.lang.Thread.run(Thread.java:818) 
                       Caused by: android.database.sqlite.SQLiteException: no such column: noteTitle (code 1): , while compiling: SELECT _id, noteTitle, noteBody, noteCreated FROM notes ORDER BY noteCreated DESC 
                        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
                        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:893) 
                        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:504) 
                        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:726) 
                        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
                        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
                        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 
                        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1426) 
                        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1273) 
                        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1144) 
                        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1312) 
                        at com.beauty.comp_eng.mynote.NoteProvider.query(NoteProvider.java:62) 
                        at android.content.ContentProvider.query(ContentProvider.java:1017) 
                        at android.content.ContentProvider$Transport.query(ContentProvider.java:238) 
                        at android.content.ContentResolver.query(ContentResolver.java:498) 
                        at android.support.v4.content.ContentResolverCompatJellybean.query(ContentResolverCompatJellybean.java:29) 
                        at android.support.v4.content.ContentResolverCompat$ContentResolverCompatImplJB.query(ContentResolverCompat.java:57) 
                        at android.support.v4.content.ContentResolverCompat.query(ContentResolverCompat.java:125) 
                        at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:59) 
                        at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:37) 
                        at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:296) 
                        at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:54) 
                        at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:42) 
                        at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:128) 
                        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
                        at java.lang.Thread.run(Thread.java:818)  08-09 19:13:20.153 10539-10591/com.sample.mynote D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 08-09 19:13:20.474 10539-10591/com.sample.mynote I/Adreno: QUALCOMM build  : ac1ef73, I86756fd4a8 
                     Build Date      : 10/05/15 
                     OpenGL ES Shader Compiler Version: XE031.06.00.00 
                     Local Branch      : 
                     Remote Branch     : 
                     Remote Branch     : 
                     Reconstruct Branch    : 08-09 19:13:20.483 10539-10591/com.sample.mynote I/OpenGLRenderer: Initialized EGL, version 1.4 08-09 19:13:20.605 10539-10539/com.sample.mynote V/ViewRootImpl: Contents drawing finished : com.sample.mynote/com.sample.mynote.MainActivity 

私はノートのタイトルのために列を追加するにはどうすればよい:ここで

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

// class to create the sqlite database 
public class DBOpenHelper extends SQLiteOpenHelper { 

    // database name and version 
    // name needs .db 
    private static final String DATABASE_NAME = "notes.db"; 
    private static final int DATABASE_VERSION = 1; 

    // database table and columns 
    // id will be primary key and content provider will expect it to have "_" in front 
    public static final String TABLE_NOTES = "notes"; 
    public static final String NOTE_ID = "_id"; 
    public static final String NOTE_BODY = "noteBody"; 
    public static final String NOTE_CREATED = "noteCreated"; 

    public static final String[] ALL_COLUMNS = 
      {NOTE_ID, NOTE_BODY, NOTE_CREATED}; 
    // SQL to create table 
    private static final String TABLE_CREATE = 
      "CREATE TABLE " + TABLE_NOTES + " (" + 
        NOTE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        NOTE_BODY + " TEXT, " + 
        NOTE_CREATED + " TEXT default CURRENT_TIMESTAMP" + 
        ")"; 

    // constructor 
    public DBOpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // called the first time this class is instantiated 
    // creates database structure if it does not exist yet 
    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     sqLiteDatabase.execSQL(TABLE_CREATE); 
    } 

    // called when database version is changed and 
    // user opens app first time after database updated 
    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
     sqLiteDatabase.execSQL("DROP TABLE IF EXISTS" + TABLE_NOTES); 
     onCreate(sqLiteDatabase); 
    } 
} 

は、私はこれを実行しようとすると、私が得る私のエラーのすべてですこのアプリには?

答えて

2

dbを変更するたびにデータベースのバージョンを増やす必要があります。 private static final int DATABASE_VERSION = 1;private static final int DATABASE_VERSION = 2;

に変更する必要があります
関連する問題