안드로이드 개발 질문/답변
(글 수 45,052)
현재 SQLiter를 확장자 명으로 가진 DB파일을
/data/data/net.test.project/ebs_travel.sqlite
에 넣었습니다. 그리고,
public static SQLiteDatabase dbOpen(String database) throws SQLException{
mDb = SQLiteDatabase.openDatabase(database, null, SQLiteDatabase.OPEN_READONLY);
return mDb;
}
함수를 만들어
dbOpen("/data/data/net.test.project/ebs_travel.sqlite");
이렇게 사용했는데.
프로그램 실행이 안되네요.
그래서 로그캣을 보니,
데이터베이스를 사용할 수 없다고 나오는데, (unable to open database file)
뭐가 잘못된건지를 못잡겠네요.
답변 부탁드릴게요 ^^;
/data/data/net.test.project/ebs_travel.sqlite
에 넣었습니다. 그리고,
public static SQLiteDatabase dbOpen(String database) throws SQLException{
mDb = SQLiteDatabase.openDatabase(database, null, SQLiteDatabase.OPEN_READONLY);
return mDb;
}
함수를 만들어
dbOpen("/data/data/net.test.project/ebs_travel.sqlite");
이렇게 사용했는데.
프로그램 실행이 안되네요.
그래서 로그캣을 보니,
데이터베이스를 사용할 수 없다고 나오는데, (unable to open database file)
뭐가 잘못된건지를 못잡겠네요.
답변 부탁드릴게요 ^^;
답변이 될지는 잘모르겠습니다만...제가 사용하는 코딩방식을 말씀드려봅니다...
db_adapter.java 파일에 아래와 같이 코딩 하였습니다
package com.android.dbtest;
import
....
public class db_adapter {
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_NAME = "test.db";
private final Context mCtx;
db_adapter(Context mCtx) {
this.mCtx = mCtx;
}
}
....
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public db_adapter open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
mDbHelper.close();
}
}
비지니스 로직을 담당하는 곳입니다...
public Cursor selectTest(String mTopArea, String mLowArea, String mGenCode) {
"mDb.query" 내용 설명은 생략합니다...
Cursor mCursor =
mDb.query(true, FREQ_TABLE_NAME + "," + BROD_TABLE_NAME, new String[]
{BROD_TABLE_NAME + "." + BROD_BROCODE,
BROD_TABLE_NAME + "." + BROD_BRODNAME},
FREQ_TABLE_NAME + "." + FREQ_TOPAREA + " = '" + mTopArea + "' AND " +
FREQ_TABLE_NAME + "." + FREQ_LOWAREA + " = '" + mLowArea + "' AND " +
BROD_TABLE_NAME + "." + BROD_GENCODE + " <> '" + mGenCode + "' AND " +
FREQ_TABLE_NAME + "." + FREQ_BROCODE + " = " +
BROD_TABLE_NAME + "." + BROD_BROCODE + " GROUP BY " +
FREQ_TABLE_NAME + "." + FREQ_BROCODE,
null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
그리고... dbtest.java(꼭 이 이름이 아니어도 됨) 파일 내에 아래와 같이 코딩하였습니다
package com.android.onair;
import java.io.File;
.....
public class dbtest extends Activity {
private db_adapter mDbHelper;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
mDbHelper = new db_adapter(this);
mDbHelper.open();
.....
//이곳에서 데이터를 읽어 활용하는 곳입니다
Cursor mCursor = mDbHelper.selectTest(mTopArea,mLowArea,"03");<<---- 비지니스 로직(즉, 쿼리문장)을 호출하는 부분 입니다,
괄호 안에는 Where 문에 사용될 변수들 입니다
startManagingCursor(mCursor);
if (mCursor.getCount() == 0) { <<---읽고자 하는 레코드가 없으면...
stopManagingCursor(mCursor); <<---커서 닫아주고...
return;
}
while (mCursor.isAfterLast() == false) { <<--- 마지막 레코드일때까지 루핑...
......
mCursor.moveToNext();<<--- 다음 레코드로 포인트 이동...
}
stopManagingCursor(mCursor);
}
mDbHelper.close(); <<--db를 close 합니다...
참고로 저는 DB파일을 넣어둔 경로는
/data/data/패키지명/databases/aaa.db" 입니다...