Technology sharing

Android database basics

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tabula contentorum

1. Android notitia repono modum

2. Database transactions

Characteres database transactions (ACID)

transaction solitudo gradu

transaction summary

3、ContetProvider

effectus

Edit

Uniform Resource Identifier URI

Edit

MIME type

ContentProvider principalis methodus

4、ContentResolver

effectus

principalis modus

Usus Causae

Instrumenta auxilia

ContentUris

UriMatcher

ContentObserver


1. Android notitia repono modum

  • SharedPreference
  • Tabularium
  • SQLite
  • Network Storage

2. Database transactions

Characteres database transactions (ACID)

  • Atomicitas: Negotium includit omnes operationes quae vel succedunt vel ad statum pristinum revolvuntur.
  • Constantia: Status datorum stat ante et post rem executionem
  • Solitudo: Multiplices users simul accedunt datorum, et plures operationes se invicem non tangunt.
  • Diuturnitatem: Cum negotium committitur, notitia in datorum perpetuum immutatur.

transaction solitudo gradu

  • Legere ulterior
  • Lege scelus: vitare sordida legit (notitia legere indefinitum)
  • Repetitio: Fuge non iterabilia verba (ad eventum currente, etsi fons notitiae ab alia re modificatur, notitia quae videt, statum adhuc in principio rei gestae continet)
  • Serialization: Fuge phantasma legit (postquam negotium unum incepit et datas legebat, alia transactio novum recordum interponit, ut prima transactio novas notitias quae in operationibus subsequentibus ante non legantur videant).

transaction summary

3、ContetProvider

effectus

  • Ratio subiecta est uti mechanism Seneca
  • Unum interfaciem praebet ad informationem accommodandam et retrievendam, qua data communicationem inter applicationes praebet
  • Data in diversis ContentProviders per URI manipulari possunt
  • Processus externi cum ContentProvider se occurrunt per ContentResolver class

  • Inter-processus notitia commercium et communicationem consequi cross-processus communicationis
  • Ianitor ContentProvider aequiparatur.

Uniform Resource Identifier URI

Unique data in ContentProvider

MIME type

Specificare fasciculum cum quadam extensione ad aperiendum cum quadam applicatione

MIME type composition = type + subtype

similis;

  • text/html
  • text/xml
  • text/css
  • application/pdf

MIME genus forma

ContentProvider principalis methodus

//外部进程向ContentProvider中添加数据
fun insert(uri:Uri,contentValues values):Uri
//外部进程删除ContentProvider中数据
fun delete(uri:Uri,selection:String,selectionArgs:String[]):Int
//外部进程更新ContentProvider中数据
fun update(uri:Uri,values:ContentValues,selection:String,selectionArgs:String[]):int
//外部应用获取ContentProvider中数据
fun query (uri:Uri,projection:String[],selection:String,selectionArgs:String[],sortOrder:String):Cursor

4、ContentResolver

effectus

Data in diversis ContentProviders per URI manipulari possunt

Externi processus penitus cum ContentProvider per ContentResolver

Una administratio omnium ContentProviders

principalis modus

ContentResolvergenus praebetContentProviderIV modi cum eodem nomine & munere in genere

//外部进程向ContentProvider中添加数据
fun insert(uri:Uri,contentValues values):Uri
//外部进程删除ContentProvider中数据
fun delete(uri:Uri,selection:String,selectionArgs:String[]):Int
//外部进程更新ContentProvider中数据
fun update(uri:Uri,values:ContentValues,selection:String,selectionArgs:String[]):int
//外部应用获取ContentProvider中数据
fun query (uri:Uri,projection:String[],selection:String,selectionArgs:String[],sortOrder:String):Cursor

Usus Causae

val resolver = getContentResolver()
val uri = Uri.parse("content://cn.scu.myprovider/user")

val cursor:Cursor = resolver.query(uri,null,null,null,"userid desc")

Instrumenta auxilia

ContentUris

Adepto & appende id ad URI

// withAppendedId()作用:向URI追加一个id
Uri uri = Uri.parse("content://cn.scu.myprovider/user") 
Uri resultUri = ContentUris.withAppendedId(uri, 7);  
// 最终生成后的Uri为:content://cn.scu.myprovider/user/7

// parseId()作用:从URL中获取ID
Uri uri = Uri.parse("content://cn.scu.myprovider/user/7") 
long personid = ContentUris.parseId(uri); 
//获取的结果为:7

UriMatcher

URI subcriptio in ContentProvider, codicem adnotationem ad URI redde secundum et congruam tabulam datam in ContentProvider

// 步骤1:初始化UriMatcher对象
    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); 
    //常量UriMatcher.NO_MATCH  = 不匹配任何路径的返回码
    // 即初始化时不匹配任何东西

// 步骤2:在ContentProvider 中注册URI(addURI())
    int URI_CODE_a = 1;
    int URI_CODE_b = 2;
    matcher.addURI("cn.scu.myprovider", "user1", URI_CODE_a); 
    matcher.addURI("cn.scu.myprovider", "user2", URI_CODE_b); 
    // 若URI资源路径 = content://cn.scu.myprovider/user1 ,则返回注册码URI_CODE_a
    // 若URI资源路径 = content://cn.scu.myprovider/user2 ,则返回注册码URI_CODE_b

// 步骤3:根据URI 匹配 URI_CODE,从而匹配ContentProvider中相应的资源(match())

@Override   
    public String getType(Uri uri) {   
      Uri uri = Uri.parse(" content://cn.scu.myprovider/user1");   

      switch(matcher.match(uri)){   
     // 根据URI匹配的返回码是URI_CODE_a
     // 即matcher.match(uri) == URI_CODE_a
      case URI_CODE_a:   
        return tableNameUser1;   
        // 如果根据URI匹配的返回码是URI_CODE_a,则返回ContentProvider中的名为tableNameUser1的表
      case URI_CODE_b:   
        return tableNameUser2;
        // 如果根据URI匹配的返回码是URI_CODE_b,则返回ContentProvider中的名为tableNameUser2的表
    }   
}

ContentObserver

Observa data mutationes in ContentProvider ex causa URI & visitatores certiorem

// 步骤1:注册内容观察者ContentObserver
    getContentResolver().registerContentObserver(uri);
    // 通过ContentResolver类进行注册,并指定需要观察的URI

// 步骤2:当该URI的ContentProvider数据发生变化时,通知外界(即访问该ContentProvider数据的访问者)
    public class UserContentProvider extends ContentProvider { 
      public Uri insert(Uri uri, ContentValues values) { 
      db.insert("user", "userid", values); 
      getContext().getContentResolver().notifyChange(uri, null); 
      // 通知访问者
   } 
}

// 步骤3:解除观察者
 getContentResolver().unregisterContentObserver(uri);
    // 同样需要通过ContentResolver类进行解除