Estoy tratando de crear una base de datos local en un teléfono Android usando sqlite
.SQLiteOpenHelper no puede llamar a Crear?
Tengo una clase auxiliar, que se muestra a continuación, que se utiliza para crear la base de datos y proporcionar la "ayuda".
Quiero crear un objeto de esta clase en la parte principal de mi código y crear la base de datos y las tablas allí también.
El problema:
Siempre que puedo crear un objeto de la clase, no parece ser una llamada al método onCreate
en el ayudante. Pensé que esto debería suceder. Pensé que onCreate
era básicamente un constructor para la clase. (Creo que estoy equivocado)
- Entonces, ¿por qué no está llamando al método
onCreate
? - ¿Cómo lo hago para crear la base de datos y las tablas donde estoy creando el objeto de la clase?
- ¿Cuál sería una mejor manera de hacer esto, si este no es un buen enfoque?
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());
}
}
Cool, gracias. Si quiero tener una clase, como la tuya, eso contiene todos mis conocimientos de SQL Server. ¿Cómo obtengo acceso al objeto de esa clase en todas mis otras clases? Por ejemplo, creo el objeto en mi clase principal. Ahora quiero usar los métodos de inserción en una clase que fue creada en mi clase principal. ¿Cómo accedo al objeto db original que se creó en la clase principal en otra clase? – prolink007
En realidad, ¿acabo de crear un nuevo objeto dentro de cada clase que necesita el databaseHelper? Creo que esto es lo que se supone que debo hacer, puedo preguntar esto como una pregunta si nadie responde. Gracias – prolink007
Estoy enfrentando un problema aquí ..02-17 10: 12: 53.441: ERROR/Base de datos (311): close() nunca fue llamado explícitamente en la base de datos '/data/data/com.ey.eyconnect/databases/test. db '02-17 10: 12: 53.441: ERROR/Base de datos (311): android.database.sqlite.DatabaseObjectNotClosedException: la aplicación no cerró el cursor ni el objeto de la base de datos que se abrió aquí. Se arroja una excepción aquí ... cómo resolver esto. .. – jennifer