public class taskDBHelper extends SQLiteOpenHelper {
//To help with identifying log messages
public static final String LOG_TAG = taskDBHelper.class.getSimpleName();
/** Name of the database file */
private static final String DATABASE_NAME = "taskDataBase.db";
/**
* Database version. If you change the database schema, you must increment the database version.
*/
private static final int DATABASE_VERSION = 1;
/**
* Constructs a new instance of {@link taskDBHelper}
* calls the SQLiteOpenHelper database superclass.
*
* @param context that the app is in
*/
public taskDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
/**This is called when the database is created for the very first time
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
//This string is used to create the table for tasks
String SQL_CREATE_TASK_DATABASE = "CREATE TABLE " + taskContract.TaskEntry.TABLE_NAME + " ("
+ taskContract.TaskEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ taskContract.TaskEntry.COLUMN_TASK_TITLE + " TEXT NOT NULL, "
+ taskContract.TaskEntry.COLUMN_DESCRIPTION + " TEXT, "
+ taskContract.TaskEntry.COLUMN_DATE + " INTEGER DEFAULT 0, "
+ taskContract.TaskEntry.COLUMN_LAST_COMPLETED + " INTEGER DEFAULT 0, "
+ taskContract.TaskEntry.COLUMN_TIME + " TEXT NOT NULL DEFAULT 0, "
+ taskContract.TaskEntry.COLUMN_RECCURING_PERIOD + " INTEGER NOT NULL DEFAULT 0, "
+ taskContract.TaskEntry.COLUMN_HISTORY + " TEXT, "
+ taskContract.TaskEntry.COLUMN_TYPE_TASK + " INTEGER NOT NULL, "
+ taskContract.TaskEntry.COLUMN_STATUS + " INTEGER NOT NULL)";
db.execSQL(SQL_CREATE_TASK_DATABASE);
//This String creates table for
String SQL_CREATE_Label_DATABASE = "CREATE TABLE " + taskContract.TaskEntry.LABEL_TABLE_NAME + " ("
+ taskContract.TaskEntry.Label_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ taskContract.TaskEntry.COLUMN_LABEL_NAME + " TEXT NOT NULL)";
db.execSQL(SQL_CREATE_Label_DATABASE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//not used
//onCreate(db);
db.execSQL("DROP TABLE IF EXISTS "+ taskContract.TaskEntry.TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS "+taskContract.TaskEntry.LABEL_TABLE_NAME);
onCreate(db);
}
}
第一个表已创建并按预期工作,但第二个表未执行,我试图用分号结束两个语句,但这无济于事。 每当我尝试访问第二张表时,它会告诉我该表不存在。任何帮助将不胜感激,谢谢:)
taskDBHelper mDbHelper = new taskDBHelper(this);
SQLiteDatabase db = mDbHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(taskContract.TaskEntry.COLUMN_LABEL_NAME, newTextLabel);
db.insert(taskContract.TaskEntry.LABEL_TABLE_NAME,null,cv);
答案 0 :(得分:1)
您的代码看起来不错,在重建SQlite数据库时,这通常是一个常见错误。如果您对数据库的结构进行了任何更改(或为此更改了数据库中的数据),则应从设备或仿真器中取消应用程序的安装,然后尝试再次运行该程序。这将破坏并重新创建您的数据库。
我曾经以为自动运行该应用程序会破坏并重新创建我的数据库,但事实并非如此。
另外,另一个快捷的“ Hack”是将数据库名称更改为null。 //您的数据库助手构造函数 公共DatabaseHelper(Context myContext){ //上下文,数据库名称,游标工厂,数据库版本 超级(myContext,null,null,myDatabaseVersionNumber);
这样做将导致数据库每次启动应用程序(或在IDE中按“播放按钮”)时都从squre 1中破坏并重新创建自身。在对数据库进行编码和测试时,这是一个不错的“ hack”,但是请记住,以后要让它像数据库一样工作时(即实际存储信息并重用存储的值),请为数据库设置一个名称!