我是编程新手,我从Java和Android开始。我想创建一个数据库,所以我按照官方文档:https://developer.android.com/training/basics/data-storage/databases.html
我遇到的问题是,在Contract类中,创建和维护数据库的成员是私有字符串(SQL_CREATE_ENTRIES和SQL_DELETE_ENTRIES)。在另一个文件上定义DBHelper类,我只是无法按照文档中显示的方式访问这些成员(FeedReaderDbHelper类只是使用它们就像它们在它的范围内一样)。所以Android Studio只是将句子设置为红色,并说:“无法解析符号'。
我该怎么办?我还在文档中读到了不建议用于Android的setter / getters。
答案 0 :(得分:3)
将SQL_CREATE_ENTRIES
和SQL_DELETE_ENTRIES
放入DBHelper
课程。
来自文档,
"契约类是定义URI,表和列名称的常量的容器。"
只应将数据库的架构放在那里。有关更改数据库的逻辑应放在DBHelper
类中。
答案 1 :(得分:0)
在Contract类上,创建和维护数据库的成员是私有字符串(SQL_CREATE_ENTRIES
和SQL_DELETE_ENTRIES
)。在另一个文件上定义DBHelper
类,我只是无法按照文档中显示的方式访问这些成员(FeedReaderDbHelper类只是使用它们就好像它们在它的范围内一样)
这些private
字段应该放在SQLiteOpenHelper
类中。它们在该类的范围内用于创建和删除由该类管理的表。您不应该在其他地方使用这些SQL字符串。
例如,
public class FeedReaderDbHelper extends SQLiteOpenHelper {
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedEntry.TABLE_NAME + " (" +
FeedEntry._ID + " INTEGER PRIMARY KEY," +
FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
... // Any other options for the CREATE command
" )";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;
// If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "FeedReader.db";
public FeedReaderDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// This database is only a cache for online data, so its upgrade policy is
// to simply to discard the data and start over
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
/* Inner class that defines the table contents */
public static abstract class FeedEntry implements BaseColumns {
public static final String TABLE_NAME = "entry";
public static final String COLUMN_NAME_ENTRY_ID = "entryid";
public static final String COLUMN_NAME_TITLE = "title";
public static final String COLUMN_NAME_SUBTITLE = "subtitle";
...
}
}