Я пытаюсь создать локальную базу данных на телефоне Android, используя sqlite
.SQLiteOpenHelper не может вызвать onCreate?
У меня есть вспомогательный класс, показанный ниже, который используется для создания базы данных и предоставления «помощи».
Я хочу создать объект этого класса в основной части моего кода и создать там базу данных и таблицы.
Проблема:
Всякий раз, когда я создать объект класса, он не кажется, вызывая метод onCreate
в помощнике. Я думал, это должно произойти. Я думал, что onCreate
был в основном конструктором для класса. (Я считаю, что я ошибаюсь)
- Так почему же это не вызов метода
onCreate
? - Или как я могу получить его для создания базы данных и таблиц, где я создаю объект класса?
- Что было бы лучшим способом сделать это, если это не хороший подход?
public class SmartDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "smart_lite_db.db";
private static final int DATABASE_VERSION = 2;
private static final String NOTIFY_TABLE_NAME = "user_notify_data";
private static final String HR_TABLE_NAME = "user_hr_data";
private static final String NOTIFY_TABLE_CREATE =
"CREATE TABLE " + NOTIFY_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"userresponse INTEGER, " +
"notifytime INTEGER);";
private static final String DATA_TABLE_CREATE =
"CREATE TABLE " + HR_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"hr INTEGER, " +
"act INTEGER, " +
"timestamp INTEGER);";
public SmartDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.v("smartdbhelper", "before creation");
db.execSQL(NOTIFY_TABLE_CREATE);
Log.v("smartdbhelper", "middle creation");
db.execSQL(DATA_TABLE_CREATE);
Log.v("smartdbhelper", "after creation");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
private SmartDBHelper dBHelper;
public void onCreate(Bundle savedInstanceState) {
//where i am wanting to create the database and tables
dBHelper = new SmartDBHelper(getContext());
}
}
Прохладный, спасибо. Если я хочу иметь класс, такой как ваш, который содержит все мои вещи обработки sql. Как получить доступ к объекту этого класса во всех моих других классах? Например, я создаю объект в своем основном классе. Теперь я хочу использовать методы insert в классе, который был создан в моем основном классе. Как получить доступ к исходному объекту db, который был создан в основном классе в другом классе? – prolink007
На самом деле, я просто создаю новый объект внутри каждого класса, которому нужен databaseHelper? Я считаю, что это то, что я должен делать, я могу задать это как вопрос, если никто не ответит. Спасибо – prolink007
im сталкиваются с проблемой здесь ..02-17 10: 12: 53.441: ERROR/Database (311): close() никогда не вызывалось явным образом в базе данных '/data/data/com.ey.eyconnect/databases/test. db '02-17 10: 12: 53.441: ERROR/Database (311): android.database.sqlite.DatabaseObjectNotClosedException: приложение не закрыло курсор или объект базы данных, который был открыт здесь. Исключение выбрано здесь .. как решить эту проблему. .. – jennifer