데이터베이스 연결을 닫는 가장 좋은 장소
내 질문에 대한 답변을 잠시 찾고 있었지만 필요한 것이지지. ListView가있는 응용 프로그램과 DB에 새 레코드를 추가 할 수있는 양식이 있습니다. 따라서 할 쿼리가 많지 않습니다.
db에 대한 연결을 처리하는 방법은 무엇입니까? 원하는 것을 얻은 후 닫아야하나요? 아니면 계속 열어 두어야하나요? 성능과 배터리 수명에 대해 생각하면서 가장 좋은 방법이 무엇인지 알고 싶습니다.
Google 엔지니어 (Dianne Hackborn)의 게시물에 따르면 데이터베이스 연결을 열어 두는 데 없습니다.
안드로이드는 놀랍게 보일 수있는 의도적 인 디자인 결정을 내 렸는데, 애플리케이션이 종료 될 생각을 포기하고 대신 리소스를 정리했습니다. 어쨌든해야 할 일은해야합니다. 그 디자인을 감안할 때 프로세스 수명의 전체 기간 동안 아무것도 열어 두지 않고 닫지 않는 것은 절대이 아닙니다. 프로세스가 정리되면 정리됩니다.
따라서 단순성을 위해 응용 프로그램 클래스를 확장하여 코드에 잘 정의 된 단일 단일 점을 제공하고 onCreate()
. DB 연결을 애플리케이션의 필드로 저장하고 나머지 코드에서 연결을 사용할 수있는 접근 자 메서드를 제공합니다.
그런 다음 걱정하지 않습니다.
데이터베이스에 대한 연결 설정은 비용이 많이 사용됩니다. 연결이 부족하지 않고 데이터베이스가 로컬 인 경우 일반적으로 확장하는 클라이언트-서버 응용 프로그램에서 수행하는 것처럼 데이터베이스에 대한 각 쓰기 작업에 대해 연결을 설정하는 대신 연결을 대신 연결합니다. 다수의 동시 사용자를 수용합니다.
일반적으로 연결을 연 Activity의 onDestroy () 함수에서 연결을 닫습니다. 커서를 사용하는 함수의 데이터베이스에서 커서를 닫습니다 ().
public MyActivity extends Activity{
private myDatabase mDatabase; // myDatabase extends SQLiteOpenHelper
private Cursor mCursor;
public MyActivity(Context context){
super(context);
initMemberVariables();
}
public ElementButton(Context context, AttributeSet attrS){
super(context, attrS);
initMemberVariables();
}
public ElementButton(Context context, AttributeSet attrS, int defStyle){
super(context, attrS, defStyle);
initMemberVariables();
}
private void initMemberVariables(){
mDatabase = new PSEdb(this.getContext());
}
private void getData(){
mCursor = mDatabase.MyGetterFunction();
while(mCursor.moveToNext()){
try{
// populate your data
}catch(CursorIndexOutOfBoundsException ex){
// handle the exception
}
}
mCursor.close();
}
@Override
public void onDestroy(){
super.onDestroy();
mDatabase.close();
}
}
참조 URL : https://stackoverflow.com/questions/6608498/best-place-to-close-database-connection
'ProgramingTip' 카테고리의 다른 글
Lua- 테이블 병합? (0) | 2021.01.10 |
---|---|
JPA, Mysql Blob이 너무 긴 데이터를 반환 함 (0) | 2021.01.10 |
속성에 관련 화되지 않음 (0) | 2021.01.10 |
ASP.Net MVC : 뷰에서 메서드 호출 (0) | 2021.01.10 |
Angular JS는 ng-repeat의 첫 번째 요소를 숨 깁니다. (0) | 2021.01.10 |