2012-03-17 3 views

ответ

1

Используйте подкласс SQLiteOpenHelper, чтобы получить доступ к вашему db. onCreate будет вызываться один раз, когда база данных будет создана.

Чтобы использовать БД, то вы можете сделать:

DBHelper db = new DBHelper(context); 
db.getReadableDatabase().query(....); 
db.close(); 

Продлить SQLiteOpenHelper сделать что-то вроде (SQL, для создания таблицы не проверяется!):

public class DBHelper extends SQLiteOpenHelper { 

private static final String DATABASE_NAME = "database.db"; 
private static final Integer DATABASE_VERSION = 1; 


DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 


/* 
* Called ONCE on the very first db access (when the db file is created) 
*/ 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE mytable (_id PRIMARY KEY AUTOINCREMENT, value TEXT); \n" + 
      "INSERT INTO mytable (value) VALUES ('data'));"); 
} 

/* 
* Called every time you open a database 
*/ 
@Override 
public void onOpen(SQLiteDatabase db) { 
} 

/* 
* Called ONCE if DATABASE_VERSION has changed since the last instantiation of DBHelper 
*/ 
    @Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
} 

}

+0

Спасибо за ваш ответ, но у меня больше вопросов. Я использую класс, подобный вашему DBHelper, и в другом классе, который я назвал DBAdapter. Я создаю экземпляр DBHelper, как и вы. Тем не менее, это называется для каждого запуска приложения. Я хочу создать таблицы и вставить данные один раз. Как я могу это решить? Редактировать: В методе onUpgrade я бросаю все таблицы и снова вызываю CreateCreate. Это проблема? – adaclks

+0

Вполне нормально отказаться от всего и воссоздать с нуля. И если вы хотите сделать это, вызывая onCreate изнутри onUpgrade, это тоже нормально. – thaussma

+0

Спасибо, но как я могу избежать операций вставки для каждого запуска приложения? Я создаю экземпляр DBHelper в моем DBAdapter и в моей MainActivity, я создаю экземпляр DBAdapter. – adaclks

Смежные вопросы