주소 : http://adamjin.egloos.com/2875879
assets에 db를 넣고 사용하는 방법은 두가지가 있다.
Adapter를 사용하는 방법과 Activity에 Adapter를 생성해서 사용하는 방법이다.
두가지 상황에 맞춰서 assets의 db를 불러오는 방법의 차이점을 아래의 코드를 보면 쉽게 이해할 수 있을 것이다.
(필자는 어느 곳도 이걸 설명한 곳이 없어 너무 고생을 했다. 나같이 고생하지 않기를 바라는 맘으로 글을 올린다.)
Adapter에서 사용예제.포인트~!!
Context사용해서 연결한다.
public class DatabaseHelper extends SQLiteOpenHelper{
public static final String ROOT_DIR = "/data/data/팩키지명/databases/"; //로컬db 저장
private static final String DATABASE_NAME = "sample.sqlite"; //로컬db명
private static final int SCHEMA_VERSION = 1; //로컬db 버전
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
setDB(context); // setDB에 context 부여
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public static void setDB(Context ctx) {
File folder = new File(ROOT_DIR);
if(folder.exists()) {
} else {
folder.mkdirs();
}
AssetManager assetManager = ctx.getResources().getAssets(); //ctx가 없으면 assets폴더를 찾지 못한다.
File outfile = new File(ROOT_DIR+"sample.sqlite");
InputStream is = null;
FileOutputStream fo = null;
long filesize = 0;
try {
is = assetManager.open("sample.sqlite", AssetManager.ACCESS_BUFFER);
filesize = is.available();
if (outfile.length() <= 0) {
byte[] tempdata = new byte[(int) filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
} else {}
} catch (IOException e) {}
}
// 이곳에 public으로 쿼리코드 생성
}
Activity에서 사용 예
포인트~~!! Adapter를 별도로 생성해서 사용한다.
public class TestActivity extends Activity {
public static final String ROOT_DIR = "/data/data/패키지명/databases/";
public SQLiteDatab-se db; // adapter 속성 정의
public Cursor cursor;
ProductDBHelper mHelper; // adapter 생성 정의
/-* Called when the activity is first created. *-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setDB(); // setDB에 Context가 없다.
mHelper=new ProductDBHelper(this);
db=mHelper.getWritableDatabase();
cursor=db.rawQuery("SELECT * FROM sample order by name",null); //쿼리문
startManagingCursor(cursor);
}
public static void setDB() { //setDB에 Context가 없다.
File folder = new File(ROOT_DIR);
if(folder.exists()) {
} else {
folder.mkdirs();
}
AssetManager assetManager = getResources().getAssets(); //ctx가 없다.
File outfile = new File(ROOT_DIR+"sample.sqlite");
InputStream is = null;
FileOutputStream fo = null;
long filesize = 0;
try {
is = assetManager.open("sample.sqlite", AssetManager.ACCESS_BUFFER);
filesize = is.available();
if (outfile.length() <= 0) {
byte[] tempdata = new byte[(int) filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
} else {}
} catch (IOException e) {}
}
class ProductDBHelper extends SQLiteOpenHelper{ //새로 생성한 adapter 속성은 SQLiteOpenHelper이다.
public ProductDBHelper(Context context) {
super(context, "sample.sqlite", null, 1); // db명과 버전만 정의 한다.
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}
'프로그래밍 정리 > 안드로이드' 카테고리의 다른 글
[안드로이드] 한 화면에 여러개의 뷰를 ! ViewFlipper 사용하기 (0) | 2012.07.06 |
---|---|
[안드로이드] SQLite를 이용한 database 생성 (0) | 2012.07.06 |
[안드로이드] SQLite데이터베이스 이용하기 (0) | 2012.07.06 |
Database 사용해 보기 1 [SQLiteOpenHelper] (0) | 2012.07.06 |
Database 사용해 보기 2 [SQLiteDatabase] (0) | 2012.07.06 |