自己動手寫DB資料庫框架(效能優化)

2021-09-11 15:25:33 字數 2381 閱讀 2095

###1. 概述

基於目前還是小白,那麼寫過的**每次必會優化,我們就拿上次自己寫的資料庫框架優化一下吧。之所以自己寫一方面是因為內涵段子專案的需求問題,必須按需定製;還有一方面我想寫得更好在效能方面一定要想方設法超過第三方的開源資料庫框架。

所有分享大綱:2017android高階之路與你同行

litepal          12882ms;

afinal 2783ms;

greeddao 623ms;

複製**

估計很多人觀察我很久了,早就看你不順眼了,老是盜取別人的資料。這個請見諒,我不是故意的,大家應該都還記得王自如和羅永浩的大戰,所以我就拿某個哥們的展示一下,非常感謝資料的提供。接下來我就拿我比較熟悉的litepal和我自己的做一下對比,同樣10000條資料:

litepal          997ms;

darren 517ms;

複製**

// 引數的快取

private final object mputmethodargs = new object[2];

// put反射方法的快取

private static final map, method> minputmethods

= new arraymap<>();

// 批量插入

@override

public void insert(listlist)

msqlitedatabase.settransactionsuccessful();

msqlitedatabase.endtransaction();

}// 單條插入

@override

public long insert(t obj)

/*** 把object轉換成contentvalues

** @return contentvalues

*/private contentvalues transformcontentvalue(t obj)

// 感謝google提供的原始碼,很快我們又會再見

class<?> putvalueclass = putvalue.getclass();

method putmethod = mputmethods.get(putvalueclass);

// 從快取裡面獲取

if (putmethod == null)

// 反射執行方法

mputmethodargs[0] = putname;

mputmethodargs[1] = putvalue;

putmethod.invoke(values, mputmethodargs);

} catch (exception e) finally

}return values;

}複製**

###4. 使用方式

增刪改查,使用起來還是蠻簡單的,資料庫存放的位置在外部儲存卡中:

// 4.0 直接從工廠裡面獲取daosupport 

idaosupportdaosupport = daosupportfactory.getfactory().

getdaosupport(person.class);

// 4.1 插入資料物件(單條)

daosupport.insert(new person("darren", 23));

// 4.2 插入資料物件(批量)

listpersons = new arraylist<>();

for (int i = 0; i < 10000; i++)

daosupport.insert(persons);

// 4.3 查詢所有

listpersons = daosupport.querysupport().queryall();

// 4.4 根據條件進行查詢

listpersons = daosupport.querysupport()

.selection("age = ?").selectionargs("23").query();

// 4.5 根據條件進行刪除

daosupport.delete("age = ?","23");

// 4.6 根據條件進行更新

person person = new person("jack",24);

daosupport.upadte(person,"age = ?","23");

複製**

所有分享大綱:2017android高階之路與你同行

自己動手寫個資料庫連線池

說到資料庫連線池也是初學者會望而卻步,認為是如何高深莫測的東西,其實可以用一句話來解釋 連線池的出現是為了使用者頻繁訪問資料庫而造成速度和效能上的遲緩才對訪問資料庫的方法作了一點修改,這個修改就是把原本要關閉的connection物件放到collection集合裡以重複利用。下面,我就來自己寫乙個資...

APICloud框架 db資料庫模組

db 模組封裝了手機常用資料庫 sqlite 的增刪改查語句,可實現資料的本地儲存,極大的簡化了資料持久化問題,本模組已支援同步介面。官方文件位址 function opendb function ret,err else function newtable function ret,err els...

360mysql連線池 自己動手寫個資料庫連線池

說到資料庫連線池也是初學者會望而卻步,認為是如何高深莫測的東西,其實可以用一句話來解釋 連線池的出現是為了使用者頻繁訪問資料庫而造成速度和效能上的遲緩才對訪問資料庫的方法作了一點修改,這個修改就是把原本要關閉的connection物件放到collection集合裡以重複利用。下面,我就來自己寫乙個資...