激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android數據存儲之SQLite使用

Android數據存儲之SQLite使用

2021-05-06 15:19Android開發網 Android

SQLite是D.Richard Hipp用C語言編寫的開源嵌入式數據庫引擎。它支持大多數的SQL92標準,并且可以在所有主要的操作系統上運行

sqlite是一款開源的、嵌入式關系型數據庫,第一個版本alpha發布于2000年。sqlite在便攜性、易用性、緊湊性、高效性和可靠性方面有著突出的表現。

在android中創建的sqlite數據庫存儲在:/data/data/<包名>/databases/目錄下。

主要特點:

-輕量級

-獨立性,沒有不依賴,無需安裝

-跨平臺,支持眾多操作系統

-支持高達2tb大小的數據庫

-每個數據庫以單個文件的形式存在

-以b-tree的數據結構形式存儲在硬盤

sqlite的數據類型:

sqlite支持null、integer、real、text和blob數據類型

分別代表:空值、整型值、浮點值、字符串值、二進制對象。

動態數據類型(弱引用):

當某個值插入到數據庫中時,sqlite將會檢測它的數據類型,如果該類型與關聯的列不匹配,sqlite則會嘗試將該值轉換成該列的類型,如果不能轉換,則該值將作為本身的類型存儲。

在android中使用sqlite主要涉及兩個類:

sqlitedatabase和sqliteopenhelper,下面對這兩個類進行主要的分析。

sqlitedatabase

這個類提供了一些管理sqlite數據庫的方法,比如創建、刪除、執行sql命令,和執行其他常見的數據庫管理任務的方法。每個程序的數據庫名字是唯一的。

常用方法:

db.execsql(string sql) //執行任何的sql語句

db.insert(string table,string nullcolumnhack,contentvalues values) //插入記錄

db.delete(string table,string whereclause,string[] whereargs)//刪除記錄

db.update(string table,contentvalues values,string whereclause,string[] whereargs)//更新記錄

db.query(string table,string[] columns,string selection,string[] selectionargs,string groupby,string having,string orderby)//查詢記錄

db.rawquery(string sql,string[] selectionargs)//通過sql語句查詢記錄

下面是一個簡單操作sqlite數據庫的示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class mainactivity extends appcompatactivity {
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
//每個程序都有自己的數據庫
//通過openorcreatedatabase來打開或創建一個數據庫,返回sqlitedatabase對象
/**
* openorcreatedatabase(string name,int mode,sqlitedatabase.cursorfactory factory)
* name: 數據庫名
* mode: 數據庫權限,mode_private為本應用程序私有,mode_world_readable和mode_world_writeable分別為全局可讀和可寫。
* factory: 可以用來實例化一個cusor對象的工廠類
*/
sqlitedatabase db = openorcreatedatabase("user.db",mode_private,null);
//創建一個表
db.execsql("create table if not exists usertb (" +
"_id integer primary key," +
"name text not null,age integer not null," +
"sex text not null)");
//向表中插入記錄
db.execsql("insert into usertb (name,age,sex) values ('張三',18,'女')");
db.execsql("insert into usertb (name,age,sex) values ('李四',19,'男')");
db.execsql("insert into usertb (name,age,sex) values ('王五',20,'女')");
//cursor為查詢結果對象,類似于jdbc中的resultset
cursor queryresult = db.rawquery("select * from usertb", null);
if (queryresult != null) {
while (queryresult.movetonext()) {
log.i("info", "id: " + queryresult.getint(queryresult.getcolumnindex("_id"))
+ " 姓名: " + queryresult.getstring(queryresult.getcolumnindex("name"))
+ " 年齡: " + queryresult.getint(queryresult.getcolumnindex("age"))
+ " 性別: " + queryresult.getstring(queryresult.getcolumnindex("sex")));
}
//關閉游標對象
queryresult.close();
}
//關閉數據庫
db.close();
}
}

當執行完openorcreatedatabase("user.db",mode_private,null)后,會在/data/data/<包名>/databases/目錄下創建一個數據庫文件,打開ddms可以查看。也可以將其導出,使用navigate等工具打開查看里面的數據。

Android數據存儲之SQLite使用

另外,上述示例對記錄的操作是使用execsql()方法通過原生的sql語句進行的,當然也可以使用上面介紹的sqlitedatabase常用的方法來操作,如insert()、delete()、update()、query()等方法。但是需要注意的是,以插入記錄舉例,當數據量不大時,通過execsql()使用sql語句進行插入與使用insert()方法插入記錄的效率是差不多的,但是如果數據量比較大,那么使用前者比使用后者的效率明顯高出很多。

sqliteopenhelper

這個類為sqlitedatabase的幫助類,主要用于管理數據庫的創建與版本更新。sqlitehelper是一個抽象類,一般通過創建一個繼承自它的子類并重寫oncreat()和onupgrade()方法進行使用。

-oncreat(sqlitedatabase db) //首次創建數據庫時調用,一般用于建表等操作。

-onupgrade(sqlitedatabase db,int oldversion,int newversion)//當升級數據庫版本時調用

下面是使用sqliteopenhelper的一個簡單示例:

創建一個繼承自sqliteopenhelper的子類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class sqlitehelper extends sqliteopenhelper {
/**
* context:上下文對象
* name:數據庫名
*/
public sqlitehelper(context context, string name) {
super(context, name, null, 1);
}
//首次創建數據庫的時候調用,一般進行建表或某些初始化的操作
@override
public void oncreate(sqlitedatabase db) {
//建表
db.execsql("create table if not exists usertb (" +
"_id integer primary key," +
"name text not null,age integer not null," +
"sex text not null)");
}
//當數據庫版本升級時自動調用
@override
public void onupgrade(sqlitedatabase db, int oldversion, int newversion) {
 
}
}

然后就可以通過sqlitehelper的實例獲取一個sqlitedatabase對象,進而對數據庫進行一系列的操作了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class mainactivity2 extends appcompatactivity {
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main2);
//創建一個sqlitehelper對象
sqlitehelper helper = new sqlitehelper(mainactivity2.this,"stu.db");
//使用getwritabledatabase()或getreadabledatabase()方法獲得sqlitedatabase對象
sqlitedatabase db = helper.getwritabledatabase();
//插入記錄
db.execsql("insert into usertb (name,age,sex) values ('張三',18,'女')");
db.execsql("insert into usertb (name,age,sex) values ('李四',19,'男')");
db.execsql("insert into usertb (name,age,sex) values ('王五',20,'女')");
//獲取游標對象
cursor queryresult = db.rawquery("select * from usertb", null);
if (queryresult != null) {
//打印所有記錄
while (queryresult.movetonext()) {
log.i("info", "id: " + queryresult.getint(queryresult.getcolumnindex("_id"))
+ " 姓名: " + queryresult.getstring(queryresult.getcolumnindex("name"))
+ " 年齡: " + queryresult.getint(queryresult.getcolumnindex("age"))
+ " 性別: " + queryresult.getstring(queryresult.getcolumnindex("sex")));
}
//關閉游標對象
queryresult.close();
}
//關閉數據庫
db.close();
}
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久无码av | 久久精品视频黄色 | 免费一级毛片在线播放视频老 | 一级黄色淫片 | 午夜视频免费在线观看 | 久久久久久久不卡 | 精品久久www| 欧美极品欧美精品欧美视频 | 欧美三级欧美成人高清www | 欧美亚洲国产日韩 | 日日夜av | 狼人狠狠干 | www.xxx视频 | 国产成人精品一区二区视频免费 | 视频一区二区三区免费观看 | sese综合 | 国产91一区二区三区 | 国内精品久久久久久影视8 嫩草影院在线观看网站成人 | 99亚洲伊人久久精品影院红桃 | 欧美18—19sex性护士中国 | 欧美成人国产va精品日本一级 | 成人不卡在线观看 | 天天天干夜夜夜操 | 久久福利小视频 | 亚洲99 | 中文区永久区 | 91网视频在线观看 | 91成人久久| 欧美成人三级视频 | 中文字幕一区二区三区四区 | 欧美一级爱操视频 | 亚洲网在线 | 一级黄色毛片子 | av免费在线免费观看 | 800av凹凸| 亚洲一级簧片 | 毛片免费一区二区三区 | 国产美女视频一区二区三区 | 视频一区二区视频 | 男女一边摸一边做羞羞视频免费 | 在线a亚洲视频播放在线观看 |