Program/Android Java

데이터베이스 헬퍼코드 입니다. 에셋폴더에서 가져다가 사용하는 것.

너구리V 2012. 8. 28. 11:01

public class DataBaseHelper extends SQLiteOpenHelper {


// The Android's default system path of your application database.

private static String DB_PATH = "/data/data/" + "jp.innocently.dressdb"

"/databases/";//패키지명.

private static String DB_NAME = "innocently_db5.sqlite";

private SQLiteDatabase myDataBase;

private final Context myContext;


/**

 * Constructor Takes and keeps a reference of the passed context in order to

 * access to the application assets and resources.

 * 

 * @param context

 */

public DataBaseHelper(Context context) {

super(context, DB_NAMEnull, 5);

this.myContext = context;

}


/**

 * Creates a empty database on the system and rewrites it with your own

 * database.

 * */

public void createDataBase() throws IOException {


boolean dbExist = checkDataBase();


if (dbExist) {

// do nothing - database already exist

Log.i("DEBUG""doNothing");

else {

Log.i("DEBUG""copy Database");

// By calling this method and empty database will be created into

// the default system path

// of your application so we are gonna be able to overwrite that

// database with our database.

this.getReadableDatabase();

try {

copyDataBase();

catch (IOException e) {

Log.i("DEBUG""e = " + e.getMessage());

throw new Error("Error copying database");

}

}

}


/**

 * Check if the database already exist to avoid re-copying the file each

 * time you open the application.

 * 

 * @return true if it exists, false if it doesn't

 */

private boolean checkDataBase() {


SQLiteDatabase checkDB = null;

try {

String myPath = DB_PATH + DB_NAME;

checkDB = SQLiteDatabase.openDatabase(myPath, null,

SQLiteDatabase.OPEN_READONLY);

catch (SQLiteException e) {

// database does't exist yet.

}


if (checkDB != null) {


checkDB.close();


}


return checkDB != null ? true : false;

}


/**

 * Copies your database from your local assets-folder to the just created

 * empty database in the system folder, from where it can be accessed and

 * handled. This is done by transfering bytestream.

 * */

private void copyDataBase() throws IOException {


// Open your local db as the input stream

InputStream myInput = myContext.getAssets().open(DB_NAME);


// Path to the just created empty db

String outFileName = DB_PATH + DB_NAME;


// Open the empty db as the output stream

OutputStream myOutput = new FileOutputStream(outFileName);


// transfer bytes from the inputfile to the outputfile

byte[] buffer = new byte[1024];

int length;

while ((length = myInput.read(buffer)) > 0) {

myOutput.write(buffer, 0, length);

}


// Close the streams

myOutput.flush();

myOutput.close();

myInput.close();


}


public void openDataBase() throws SQLException {

// Open the database

String myPath = DB_PATH + DB_NAME;

myDataBase = SQLiteDatabase.openDatabase(myPath, null,

SQLiteDatabase.OPEN_READONLY);

}


@Override

public synchronized void close() {

if (myDataBase != null)

myDataBase.close();

super.close();

}


@Override

public void onCreate(SQLiteDatabase db) {


}


@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {


}


// Add your public helper methods to access and get content from the

// database.

// You could return cursors by doing "return myDataBase.query(....)" so it'd

// be easy

// to you to create adapters for your views.






private SQLiteDatabase sdb;

DataBaseHelper myDbHelper;


myDbHelper = new DataBaseHelper(this);

try {

myDbHelper.createDataBase();

catch (IOException ioe) {

throw new Error("Unable to create database");

}

try {

myDbHelper.openDataBase();

catch (SQLException sqle) {

Log.i("DEBUG""e " + sqle.getMessage());

throw sqle;

}

myDbHelper.close();

반응형