summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vdrmanager/src/de/bjusystems/vdrmanager/data/db/DBAccess.java170
1 files changed, 170 insertions, 0 deletions
diff --git a/vdrmanager/src/de/bjusystems/vdrmanager/data/db/DBAccess.java b/vdrmanager/src/de/bjusystems/vdrmanager/data/db/DBAccess.java
new file mode 100644
index 0000000..f0c788b
--- /dev/null
+++ b/vdrmanager/src/de/bjusystems/vdrmanager/data/db/DBAccess.java
@@ -0,0 +1,170 @@
+package de.bjusystems.vdrmanager.data.db;
+
+import java.sql.SQLException;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.util.Log;
+
+import com.j256.ormlite.android.apptools.OpenHelperManager;
+import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
+import com.j256.ormlite.dao.RuntimeExceptionDao;
+import com.j256.ormlite.support.ConnectionSource;
+import com.j256.ormlite.table.TableUtils;
+
+import de.bjusystems.vdrmanager.R;
+import de.bjusystems.vdrmanager.data.Vdr;
+
+/**
+ * Database helper class used to manage the creation and upgrading of your
+ * database. This class also usually provides the DAOs used by the other
+ * classes.
+ */
+public class DBAccess extends OrmLiteSqliteOpenHelper {
+
+ public static final String TAG = DBAccess.class.getName();
+ // name of the database file for your application -- change to something
+ // appropriate for your app
+ public static final String DATABASE_NAME = "vdrmanager.db";
+ // any time you make changes to your database objects, you may have to
+ // increase the database version
+ private static final int DATABASE_VERSION = 2;
+
+ private RuntimeExceptionDao<Vdr, Integer> vdrDAO = null;
+
+
+
+ public static String getDataBaseFile(){
+ return "/data/data/de.bjusystems.vdrmanager/databases/" + DATABASE_NAME;
+ }
+
+ public DBAccess(Context context) {
+ super(context, DATABASE_NAME, null, DATABASE_VERSION,
+ R.raw.ormlite_config);
+ }
+
+ /**
+ * This is called when the database is first created. Usually you should
+ * call createTable statements here to create the tables that will store
+ * your data.
+ */
+ @Override
+ public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
+ try {
+ Log.i(DBAccess.class.getName(), "onCreate");
+ TableUtils.createTable(connectionSource, Vdr.class);
+ } catch (SQLException e) {
+ Log.e(DBAccess.class.getName(), "Can't create database", e);
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * This is called when your application is upgraded and it has a higher
+ * version number. This allows you to adjust the various data to match the
+ * new version number.
+ */
+ @Override
+ public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,
+ int oldVersion, int newVersion) {
+ try {
+ Log.i(DBAccess.class.getName(), "onUpgrade");
+ TableUtils.dropTable(connectionSource, Vdr.class, true);
+ // after we drop the old databases, we create the new ones
+ onCreate(db, connectionSource);
+ } catch (SQLException e) {
+ Log.e(DBAccess.class.getName(), "Can't drop databases", e);
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ /**
+ * Close the database connections and clear any cached DAOs.
+ */
+ @Override
+ public void close() {
+ super.close();
+ vdrDAO = null;
+ }
+
+
+ static volatile DBAccess helper;
+ static volatile boolean created = false;
+ static volatile boolean destroyed = false;
+
+
+
+ /**
+ * Get a helper for this action.
+ */
+ public static DBAccess get(Context ctx) {
+
+ if (helper == null) {
+ helper = getHelperInternal(ctx);
+ created = true;
+ }
+
+
+ if (helper == null) {
+ if (!created) {
+ throw new IllegalStateException("A call has not been made to onCreate() yet so the helper is null");
+ } else if (destroyed) {
+ throw new IllegalStateException(
+ "A call to onDestroy has already been made and the helper cannot be used after that point");
+ } else {
+ throw new IllegalStateException("Helper is null for some unknown reason");
+ }
+ } else {
+ return helper;
+ }
+ }
+
+ /**
+ * Get a connection source for this action.
+ */
+ public ConnectionSource getConnectionSource(Context ctx) {
+ return get(ctx).getConnectionSource();
+ }
+
+
+ /**
+ * This is called internally by the class to populate the helper object instance. This should not be called directly
+ * by client code unless you know what you are doing. Use {@link #getHelper()} to get a helper instance. If you are
+ * managing your own helper creation, override this method to supply this activity with a helper instance.
+ *
+ * <p>
+ * <b> NOTE: </b> If you override this method, you most likely will need to override the
+ * {@link #releaseHelper(OrmLiteSqliteOpenHelper)} method as well.
+ * </p>
+ */
+ protected static DBAccess getHelperInternal(Context context) {
+ @SuppressWarnings({ "unchecked", "deprecation" })
+ DBAccess newHelper = (DBAccess) OpenHelperManager.getHelper(context, DBAccess.class);
+ logger.trace("{}: got new helper {} from OpenHelperManager", "", newHelper);
+ return newHelper;
+ }
+
+ /**
+ * Release the helper instance created in {@link #getHelperInternal(Context)}. You most likely will not need to call
+ * this directly since {@link #onDestroy()} does it for you.
+ *
+ * <p>
+ * <b> NOTE: </b> If you override this method, you most likely will need to override the
+ * {@link #getHelperInternal(Context)} method as well.
+ * </p>
+ */
+ protected void releaseHelper(DBAccess helper) {
+ OpenHelperManager.releaseHelper();
+ logger.trace("{}: helper {} was released, set to null", this, helper);
+ DBAccess.helper = null;
+ }
+
+ public RuntimeExceptionDao<Vdr, Integer> getVdrDAO() {
+ if(vdrDAO == null){
+ vdrDAO = getRuntimeExceptionDao(Vdr.class);
+ }
+ return vdrDAO;
+ }
+
+}