Android 資料庫總結

2021-09-26 20:35:32 字數 2821 閱讀 4854

android的資料庫是很方便的,但是很多的時候,android程式設計師很少使用資料庫,包括我在內,目前在我們的專案中還沒用過資料庫,但是不常用不代表不需要掌握,我們來大體總結一下

我自己基於使用者、帖子、訪客三個表寫了乙個demo:資料庫demo

首先建立乙個dbhelper類繼承sqliteopenhelper類,重寫oncreate()和onupgrade()方法,這個類主要用來建立資料庫和建表

public class dbhelper extends sqliteopenhelper ;

public static final string post_columns = new string ;

public static final string visitor_columns = new string ;

public dbhelper(context context)

@override

public void oncreate(sqlitedatabase sqlitedatabase)

@override

public void onupgrade(sqlitedatabase sqlitedatabase, int oldversion, int newversion)

@override

public void onopen(sqlitedatabase db)

}}

然後我們再建立乙個daomanager類用來處理一些操作方法,先看一下它的抽象類:

public inte***ce dao
增刪改,需先呼叫getwritabledatabase():

1、然後呼叫對應的方法,傳入引數

2、呼叫通用的execsql(string sql),通過語句直接操作

// 核心就是try中的幾行**,記得在finally中關閉事務和db

public boolean insert(string tablename, contentvalues contentvalues) catch (sqliteconstraintexception e) catch (exception e) finally

}return false;

}// 刪和改類似,上面begintransaction()下面那行改為

db.delete(tablename, "id = ?", new string);

db.update(tablename, contentvalues, "id = ?", new string);

// 至於說直接用sql語句,那麼舉個增的例子,其它一樣

db.execsql("insert into " + dbhelper.table_name_user + " (id, name, age, country) values (11, '馬雲', 55, '中國')");

查,需先呼叫getreadabledatabase():

1、使用query:傳入一些引數來查

2、使用rawquery:直接用語句

// 直接查

cursor = db.query(dbhelper.table_name_user, dbhelper.user_columns, null, null, null, null, null);

// 用語句查

cursor = db.rawquery(sql,null);

我的demo中有兩個表連線查詢語句比較抽象:

// 查詢所有的帖子

// 查詢帖子表並連使用者表查詢發帖人的資訊

string sql = "select * from " + dbhelper.table_name_post + " post left join " + dbhelper.table_name_user + " user on post.publisheruid = user.id";

// 查詢某一帖子的訪客

// 從訪客表中查詢某一帖子的訪客,並連使用者表查詢訪客的資訊

string sql = "select * from " + dbhelper.table_name_visitor + " visitor left join " + dbhelper.table_name_user + " user on visitor.visitoruid = user.id where visitor.postid = " + postid;

執行緒的問題我簡單說一下,sqlite是執行緒安全的,執行緒安全意味著速度變慢,如果不需要執行緒安全,可以禁用互斥鎖。

三種執行緒模型:

為了保證最高的併發性,推薦:

對於sqlite_busy

再說一下這篇文章:concurrent database access - dmytro danylyk

如果在兩個執行緒新建了兩個資料庫連線,並且這兩個執行緒同時去寫入,那麼其中一項不會被寫入,並且報錯:資料庫被鎖定。

要在多執行緒中使用資料庫,要確保使用同乙個資料庫連線,所有我們使用乙個單例模式

即使是使用了單例,也同樣會報乙個新的錯誤:嘗試重新開啟乙個已經關閉的物件。因為我們使用同乙個資料庫連線,可以執行緒1關閉了資料庫,而執行緒2還在用它,所以會報錯。

一些人建議不要關閉資料庫,但是這樣的話會引發記憶體洩漏。

正確的方法是:寫乙個open和close的方法,方法內部有乙個計數器,這樣來解決上面提到的問題。

如此一來就可以使用資料庫了,並且它是執行緒安全的

把那些語句掌握了,基本用起來沒啥問題。

我寫了個demo,模擬帖子、使用者、訪客,有興趣的,尤其android新手可以看下:資料庫demo

android資料庫事務

在android應用程式開發中,在使用到資料庫的時候,事務處理是非常重要的。首先android資料庫操作 特別是寫操作 是非常慢的,將所有操作打包成乙個事務能大大提高處理速度。其次是保證資料的一致性,讓乙個事務中的所有操作都成功執行,或者失敗,或者所有操作回滾。實現android資料庫事務非常簡單,...

Android 資料庫操作

public class sqldao 增加 public void adduser string username,string password db.close 刪除 public void deleteuser string username delete from user where u...

android 資料庫儲存

專案開發我們都逃不過資料庫的儲存。在android 中 sqlite 是最好不過的資料儲存方式,但是有時候我們只需要某個變數的值。這樣要用sqlite就顯得得不償失了。這時候 sharedpreferences 是個不錯的選擇。sharedpreferences是一種輕型的資料儲存方式,它的本質是基...