package by.istin.android.xcore.db.impl.sqlite; import android.annotation.TargetApi; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Build; import android.provider.BaseColumns; import by.istin.android.xcore.db.IDBConnection; import by.istin.android.xcore.db.IDBConnector; import by.istin.android.xcore.utils.StringUtil; /** * Created with IntelliJ IDEA. * User: IstiN * Date: 18.10.13 */ public class SQLiteConnector extends SQLiteOpenHelper implements IDBConnector { private static final String TAG = SQLiteConnector.class.getSimpleName(); private static final String DATABASE_NAME_TEMPLATE = "%s.main.xcore.db"; private static final int DATABASE_VERSION = 1; /** The Constant CREATE_TABLE_SQL. */ public static final String CREATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS %1$s (" + BaseColumns._ID + " INTEGER PRIMARY KEY ASC)"; public static final String CREATE_INDEX_SQL = "CREATE INDEX fk_%1$s_%2$s ON %1$s (%2$s ASC);"; public static final String CREATE_COLUMN_SQL = "ALTER TABLE %1$s ADD %2$s %3$s;"; public static final String FOREIGN_KEY_TEMPLATE = "ALTER TABLE %1$s ADD CONSTRAINT fk_%1$s_%2$s " + " FOREIGN KEY (%3$s_id) " + " REFERENCES %2$s(id);"; public SQLiteConnector(Context context) { super(context, StringUtil.format(DATABASE_NAME_TEMPLATE, context.getPackageName()), null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } @Override @TargetApi(value = Build.VERSION_CODES.HONEYCOMB) public SQLiteDatabase getWritableDatabase() { SQLiteDatabase writableDatabase = super.getWritableDatabase(); if (writableDatabase != null) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1 && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { writableDatabase.setLockingEnabled(false); } if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) { writableDatabase.enableWriteAheadLogging(); } } return writableDatabase; } @Override @TargetApi(value = Build.VERSION_CODES.HONEYCOMB) public SQLiteDatabase getReadableDatabase() { SQLiteDatabase readableDatabase = super.getReadableDatabase(); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1 && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { readableDatabase.setLockingEnabled(false); } if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) { readableDatabase.enableWriteAheadLogging(); } return readableDatabase; } @Override public IDBConnection getWritableConnection() { return new SQLiteConnection(getReadableDatabase()); } @Override public IDBConnection getReadableConnection() { return new SQLiteConnection(getWritableDatabase()); } @Override public String getCreateTableSQLTemplate(String table) { return StringUtil.format(CREATE_TABLE_SQL, table); } @Override public String getCreateIndexSQLTemplate(String table, String name) { return StringUtil.format(CREATE_INDEX_SQL, table, name); } @Override public String getCreateColumnSQLTemplate(String table, String name, String type) { return StringUtil.format(CREATE_COLUMN_SQL, table, name, type); } }