“Content-Provider”와“SQLite Database”의 정확한 차이점
저는 Android 용 SQLite 데이터베이스 프로그래밍을 해봤지만 Content-Provider에 대해서는 다음을 제외하고는 아무것도 모릅니다. " Android 개발자 페이지를 참조 했으므로 Android SDK는 데이터를 저장하고 검색하는 데 사용되는"Content-provider "에 대해 설명했습니다."
하지만,
- "Content-Provider"와 "SQLite Database"의 정확한 차이점은 무엇입니까?
- 언제 데이터를 저장하는 것이 가장 좋습니까?
모든 예 또는 도움 !!
다음과 같은 주요 차이점을 발견했습니다.
데이터를 데이터베이스에 저장하는 것은 데이터를 유지하는 좋은 방법 중 하나 이지만 Android에서 생성 된 Android 데이터베이스는 visible
해당 데이터를 생성 한 애플리케이션에만 해당된다는 경고가 있습니다. 즉, 하나의 애플리케이션이 Android에서 생성 한 SQLite 데이터베이스는 다른 애플리케이션이 아닌 해당 애플리케이션에서만 사용할 수 있습니다.
따라서이 need to share data between applications, you need to use the content provider model as recommended in Android.
기사에서는 콘텐츠 제공 업체의 기본 사항과이를 구현하는 방법을 설명합니다.
이 링크 에서이 기사를 찾았습니다.
정말 좋은 정보가 제공되었습니다.
"Content-Provider"와 "SQLite Database"의 정확한 차이점은 무엇입니까?
ContentProvider
다른 프로세스에 데이터베이스를 노출하는 구현할 수있는 API입니다. 그것은 수있는 데이터가 SQLite 데이터베이스에 저장되는 방식으로 구현 될 수 있지만 그럴 필요하지 않습니다.
언제 데이터를 저장하는 것이 가장 좋습니까?
초록으로 대답하는 것은 불가능합니다. 일반적으로를 사용해야하는 경우가 아니라면 ContentProvider
데이터베이스를 사용하십시오.
저는 단순히 SQLite 메서드를 사용하는 수천 명의 사용자가 사용하는 좋은 앱을 많이 만들었습니다. 그러나 그것은 얼마 전이었고 이제는 ContentProvider에서 쉽게 처리 할 수있는 많은 코드를 수동으로 작성해야했습니다. 그 당시에는 코드에 복잡성 만 추가하는 것처럼 보였기 때문에 콘텐츠 공급자를 사용하는 것을 선호하지 않았습니다.
그러나 지난 몇 년 동안 Android가 발전함에 따라 시간을 절약하고 더 많은 일을 할 수있는 ContentProvider로 이동했습니다. 나는 지금 그것을 광범위하게 사용합니다. 콘텐츠 제공자 클래스를 작성하면 생활이 훨씬 쉬워집니다. ContentProvider를 사용하면 과거에는 모든 것을 수동으로 작성해야했지만 여전히 효율적으로 작동하지 않는 커서 로더, 로더 콜백 및 대량 삽입을 훨씬 쉽게 처리 할 수 있습니다. 특히 하나의 notifychange () 메소드 덕분에 자동으로 업데이트되는 목록보기를 업데이트 할 때 특히 그렇습니다. 즉, 이제 내 리스너를 입력하고 목록보기 및 어댑터에서 콘텐츠를 수동으로 업데이트 할 필요가 없습니다. 또한 데이터베이스를 열고 닫는 것에 대해 걱정하거나 메모리 누수에 대해 걱정할 필요가 없습니다. 그것은 모두 콘텐츠 제공자가 처리합니다. 가끔 내가 직면하는 유일한 문제는 ContentProviders에서 복잡한 쿼리를 수행 할 수 없다는 것입니다. 이 경우에도 여전히 원시 쿼리를 사용하고 sqlite와의 구식 수동 상호 작용을 사용할 수 있습니다.
이전에 자신의 DbAdapter, Helper 및 Observer를 작성한 경우 모든 것을 ContentProvider로 변환하는 데 시간을 소비하지 않고도 새 앱으로 안전하게 이동할 수 있습니다. 그러나 내 경험을 바탕으로 ContentProvider로 이동하는 것이 좋습니다. 익숙해지는 데는 시간이 좀 걸리 겠지만 일단 경험이 쌓이면 그대로있을 것입니다.
2017 업데이트 이제 모든 플랫폼에서 데이터베이스를 사용하는 훨씬 더 나은 방법 인 Realm으로 전환했습니다 . 몇 시간 동안 학습하고 앱 개발 경력에서 수많은 시간을 절약하십시오.
1. 콘텐츠 제공자는 스레드로부터 안전하지 않습니다.
기본적으로 콘텐츠 공급자는 스레드로부터 안전하지 않습니다. 콘텐츠 제공 업체를 사용하는 여러 스레드가있는 경우 다양한 예외가 발생하고 기타 데이터 불일치가 발생하는 것을 볼 수 있습니다. 이 문제를 해결하는 가장 쉬운 방법은 콘텐츠 공급자가 노출하는 각 공용 메서드에 동기화 된 키워드를 사용하는 것입니다.
이런 식으로 한 번에 하나의 스레드 만 이러한 메서드에 액세스 할 수 있습니다.
2. 많은 글을 쓸 때 멋지게 플레이
새로운 Serval Maps 애플리케이션에서 바이너리 파일의 데이터를 애플리케이션에서 내부적으로 사용하는 데이터베이스로 가져올 필요가 있습니다. 이 작업을 수행하고 나머지 응용 프로그램을 잘 활용하려면 다음을 수행하는 것이 가장 좋습니다.
Spawn a new thread to undertake the import so other threads are not adversely impacted, in particularly the thread in charge of updating the UI; and Pause briefly at the end of the each import to give other threads which need to use the synchronized methods more of a chance.
3. Content providers force you to think laterally sometimes
The way that content providers in Android work is to provide a layer of abstraction between the rest of your code and the underlying database. This is mainly due to the fact, as far as I can tell, that content providers can access data from places other than databases.
This means that you can’t execute raw SQL queries on the underlying database and you need to specify the various components of a SQL query using variables passed to the various methods such as the query method. If you have a task that doesn’t fit into the way that SQL is handled by a content provider you have two options:
Think laterally about the query, maybe you can get the data that you need by alternative queries and accessing the results from the cursor; and Use a URI for accessing the data normally and a special URI that is matched to a specific query for those tasks that don’t have alternatives.
Content Providers are used when you want to share your data across applications.
If you have a database attached with an application and you want another application to use some data, you can implement a content provider that exposes the data
The main difference is: when your app needs to share information to another apps, use Content-Provider. SQLite only storage data for the app who creates it
I read this answer while looking for same doubt, so thought of sharing it. it states -
It's good practice to provide the extra level of abstraction over your data to make it easier to change internally. What if you decide to change the underlying database structure at a later time? If you use a ContentProvider you can contain all the structural changes within it, where as if you don't use one, you are forced to change all areas of the code that are affected by the structural changes. Besides, it's nice to be able to re-use the same standard API for accessing data rather than littering your code with low-level access to the database.
So, using a content provider would be a good idea.
Think of advanced Content Management Systems. Each object (page, image, news article, event item, etc.) has a content, an address, user permissions, and ways to interact with it from different parts of the system. Content Providers do that for Android. You can now share files or images you may have stored in your application. You can also create custom sharable objects, like bussiness contacts, editable notes, etc. And specify security and the default application to deal with such object when you open them from any other application.
One difference is that Content Providers have platform support for Content Observers. Your going to need to implement your own Observable pattern for a SQLite database.
'IT story' 카테고리의 다른 글
지원 라이브러리 v21로 업그레이드 한 후 PreferenceActivity에 ActionBar가 없음 (0) | 2020.09.17 |
---|---|
문자열에 공백이 있는지 확인 (0) | 2020.09.17 |
JTable에 행을 추가하는 방법은 무엇입니까? (0) | 2020.09.17 |
C #에서 데이터를 문자열에서 long으로 어떻게 변환 할 수 있습니까? (0) | 2020.09.17 |
AppDelegate 인스턴스 변수 참조 (0) | 2020.09.17 |