andriod sqlite 詳解轉載

SQLite簡介

Google為Andriod的較大的數據處理提供了SQLite,他在數據存儲、管理、維護等各方面都相當出色,功能也非常的強大。SQLite具備下列特點:

?

1.輕量級

使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,而且那個動態庫的尺寸想當小。

2.獨立性

SQLite 數據庫的核心引擎不需要依賴第三方軟件,也不需要所謂的“安裝”。

3.隔離性

SQLite 數據庫中所有的信息(比如表、視圖、觸發器等)都包含在一個文件夾內,方便管理和維護。

4.跨平臺

SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統也是能夠運行,比如:Android。

5.多語言接口

SQLite 數據庫支持多語言編程接口。

6.安全性

SQLite 數據庫通過數據庫級上的獨占性和共享鎖來實現獨立事務處理。這意味著多個進程可以在同一時間從同一數據庫讀取數據,但只能有一個可以寫入數據。

Android中的SQLite使用

首先創建數據庫類

public class DatabaseHelper extends SQLiteOpenHelper {
????private static final String DB_NAME = "mydata.db"; //數據庫名稱
????private static final int version = 1; //數據庫版本
?????
????public DatabaseHelper(Context context) {
????????super(context, DB_NAME, null, version);
????????// TODO Auto-generated constructor stub
????}
????@Override
????public void onCreate(SQLiteDatabase db) {
????????String sql = "create table user(username varchar(20) not null , password varchar(60) not null );";?????????
????????db.execSQL(sql);
????}
????@Override
????public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
????????// TODO Auto-generated method stub
????}
}

SQLiteOpenHelper類介紹

SQLiteOpenHelper是SQLiteDatabase的一個幫助類,用來管理數據庫的創建和版本的更新。一般是建立一個類繼承它,并實現它的onCreate和onUpgrade方法。

方法名方法描述
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)構造方法,一般是傳遞一個要創建的數據庫名稱那么參數
onCreate(SQLiteDatabase db)創建數據庫時調用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)版本更新時調用
getReadableDatabase()創建或打開一個只讀數據庫
getWritableDatabase()創建或打開一個讀寫數據庫

下面來介紹調用的方法

創建數據庫

這里特別的地方是通過調用了SQLiteOpenHelper類的getReadableDatabase()方法來實現創建一個數據庫的

1
2
3
DatabaseHelper database = new DatabaseHelper(this);//這段代碼放到Activity類中才用this
SQLiteDatabase db = null;
db = database.getReadalbeDatabase();

SQLiteDatabase類為我們提供了很多種方法,而較常用的方法如下

(返回值)方法名方法描述
(int) delete(String table,String whereClause,String[] whereArgs)刪除數據行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values)添加數據行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)更新數據行的便捷方法
(void) execSQL(String sql)執行一個SQL語句,可以是一個select或其他的sql語句
(void) close()關閉數據庫
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)查詢指定的數據表返回一個帶游標的數據集
(Cursor) rawQuery(String sql, String[] selectionArgs)運行一個預置的SQL語句,返回帶游標的數據集(與上面的語句最大的區別就是防止SQL注入)

數據的添刪改查分別可以通過2種途徑來實現

數據的添加

1.使用insert方法

1
2
3
ContentValues cv = new ContentValues();//實例化一個ContentValues用來裝載待插入的數據cv.put("username","Jack Johnson");//添加用戶名
cv.put("password","iLovePopMusic"); //添加密碼
db.insert("user",null,cv);//執行插入操作

2.使用execSQL方式來實現

1
2
String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL語句
db.execSQL(sql);//執行SQL語句

數據的刪除

同樣有2種方式可以實現

1
2
3
String whereClause = "username=?";//刪除的條件
String[] whereArgs = {"Jack Johnson"};//刪除的條件參數
db.delete("user",whereClause,whereArgs);//執行刪除

使用execSQL方式的實現

1
2
String sql = "delete from user where username='Jack Johnson'";//刪除操作的SQL語句
db.execSQL(sql);//執行刪除操作

數據修改

同上,仍是2種方式

1
2
3
4
5
ContentValues cv = new ContentValues();//實例化ContentValues
cv.put("password","iHatePopMusic");//添加要更改的字段及內容
String whereClause = "username=?";//修改條件
String[] whereArgs = {"Jack Johnson"};//修改條件的參數
db.update("user",cv,whereClause,whereArgs);//執行修改

使用execSQL方式的實現

1
2
String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL語句
db.execSQL(sql);//執行修改

數據查詢

數據查詢相對前面幾種方法就復雜一些了,因為查詢會帶有很多條件

通過query實現查詢的

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

各參數說明:

  • table:表名稱
  • colums:列名稱數組
  • selection:條件子句,相當于where
  • selectionArgs:條件語句的參數數組
  • groupBy:分組
  • having:分組條件
  • orderBy:排序類
  • limit:分頁查詢的限制
  • Cursor:返回值,相當于結果集ResultSet

針對游標(Cursor)也提供了不少方法

方法名稱方法描述
getCount()總記錄條數
isFirst()判斷是否第一條記錄
isLast()判斷是否最后一條記錄
moveToFirst()移動到第一條記錄
moveToLast()移動到最后一條記錄
move(int offset)移動到指定的記錄
moveToNext()移動到嚇一條記錄
moveToPrevious()移動到上一條記錄
getColumnIndex(String columnName)獲得指定列索引的int類型值

實現代碼

1
2
3
4
5
6
7
8
Cursor c = db.query("user",null,null,null,null,null,null);//查詢并獲得游標
if(c.moveToFirst()){//判斷游標是否為空
????for(int i=0;i<c.getCount();i++){
????????c.move(i);//移動到指定記錄
????????String username = c.getString(c.getColumnIndex("username");
????????String password = c.getString(c.getColumnIndex("password"));
????}
}

通過rawQuery實現的帶參數查詢

1
2
3
4
Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
????String password = c.getString(c.getColumnIndex("password"));
}

轉載于:https://www.cnblogs.com/mengkaia/p/5551847.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271693.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫:SQLServer中in和 exists函數用法筆記

今天給大家分享一下SQLServer中in和 exists 用法&#xff0c;希望能對大家有所幫助。一、IN 用法確定指定的值是否與子查詢或列表中的數據相匹配。1.1 語法格式test_expression [ NOT ] IN ( subquery | expression [ ,...n ] )1.2 參數說明test_expression為任意有…

什么是m叉樹_不懂數據庫索引的底層原理?那是因為你心里沒點b樹

前幾天下班回到家后正在處理一個白天沒解決的bug&#xff0c;廁所突然傳來對象的聲音&#xff1a; 對象&#xff1a;xx&#xff0c;你有《時間簡史》嗎&#xff1f; 我&#xff1a;我去&#xff01;妹子&#xff0c;你這啥癖好啊&#xff0c;我有時間也不會去撿屎啊&#xff01…

可重入鎖是什么和demo

可重入鎖 reentrantlock是獨占鎖且可重入的 synchronized 也可以重入 可重入意思就是這個線程已經獲取鎖了&#xff0c;你再獲取該鎖還能獲取 獲取的還是原來的鎖 不會出現問題 可以降低編程難度 代碼如下: new Thread(new Runnable() {Overridepublic void run() {synchr…

linux 安裝python 3.x,Linux 安裝python3.x步驟

本文轉發自博客園非真的文章&#xff0c;內容略有改動linux系統本身默認安裝有2.x版本的python&#xff0c;版本x根據不同版本系統有所不同&#xff0c;通過python --V 或 python --version 查看系統自帶的python版本。有一些系統命令時需要用到python2&#xff0c;不能卸載&am…

數據庫:SQLServer中游標的用法筆記

一、游標的概念知識游標可以理解為SQL Server的一種數據訪問機制&#xff0c;它允許用戶訪問數據的維度是數據行。用戶可以對每一行數據進行單獨處理&#xff0c;從而降低系統開銷和潛在的阻隔情況&#xff0c;游標主要用于存儲過程&#xff0c;觸發器和 T_SQL復雜的腳本中&…

BZOJ_1009_[HNOI2008]_GT考試_(動態規劃+kmp+矩陣乘法優化+快速冪)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id1009 字符串全部由0~9組成,給出一個串s,求一個長度為n的串,不包含s的種類有多少. 分析 第一眼以為是組合.然后更滑稽的是用錯誤的方法手算樣例居然算出來是對的...我數學是有多差... 題解也是看了好半天,有點難理解. 感覺…

智慧政務解決方案(28頁)pdf_【金眾電子】智慧政務解決方案

智慧政務解決方案立式黨建廣告機廣告機簡介&#xff1a;KC-立式政務廣告機(室內/室外可選)液晶屏幕特別賣點&#xff1a;安裝簡易、亮度調節、實時更新、傳輸安全應用場所&#xff1a;各種需要文化傳播的政務機構、政府機關、會議場所等。雙立柱政務文化欄/宣傳欄文化欄簡介&am…

笨辦法學linux dhcp,了解網關、DNS、子網掩碼、MAC地址、DHCP

原標題&#xff1a;了解網關、DNS、子網掩碼、MAC地址、DHCP什么是網關、DNS、子網掩碼&#xff0c;它有什么作用&#xff0c;確實&#xff0c;我們平時在網絡中總是在不斷的提到網關&#xff0c;卻很少真正的去了解它。一、什么是網關1、什么是網關網關是一種充當轉換重任的計…

數據庫:SQLServer Stuff 函數用法筆記

今天小編給大家分享一下自己整理一下SQLServer Stuff函數用法技巧和常用示例&#xff0c;有需要的朋友可以學習一下。一、Stuff函數的作用1.1官方解釋STUFF 函數將字符串插入到另一個字符串中。 它從第一個字符串的開始位置刪除指定長度的字符&#xff1b;然后將第二個字符串插…

自定義注解,aop實現注解鎖

多線程環境下&#xff0c;會出現線程不安全的問題&#xff0c;所以要對某些方法加鎖以保證線程安全 但是如果方法過多&#xff0c;每個方法前后都加這么一句&#xff0c;有點麻煩了&#xff0c;而且代碼可讀性也會差一些。可以使用aop切面編程&#xff0c;對某些加有特定注解&…

Android——實現歡迎界面的自動跳轉(轉)

Android實現歡迎界面的自動跳轉&#xff0c;就是打開某一個安卓手機應用&#xff0c;出現的歡迎界面停留幾秒鐘&#xff0c;自動進入應用程序的主界面。在網上看到很多種實現辦法&#xff0c;但是感覺這種方法還是比較簡單的。 在onCreate里設置個Timer&#xff0c;然后建立Int…

手機端刷recovery工具_MIUI/REDMIN手機玩機匯集

愿你刷機半生歸來仍是MIUI1解鎖篇解鎖Bootloader準備工作&#xff1a;1.手機備份數據2.手機進入開發者模式①進入“設置 -> 我的設備 -> 全部參數"中連續點擊MIUI版本&#xff0c;進入”開發者模式“②進入“設置 -> 開發者選項 -> 設備解鎖狀態”中綁定賬號和…

數據結構基礎:線性表學習筆記

1、線性表定義線性表是指n個元素的有限序列(n>0),通常用(a1,a2,a3...,an),來表示。2、線性表特點1、存在唯一的一個首元素2、存在唯一一個尾元素3、除第首元素外&#xff0c;每個元素只有一個直接前驅。4、除尾元素外&#xff0c;每個元素只有一個直接后繼。3、線性表的存儲…

c語言流水燈小程序,流水燈小程序.doc

流水燈小程序流水燈小程序#include void delay() //延時函數&#xff0c;這里延時100ms{int i,j;for(i0;i<100;i){for(j0;j<2242;j){} //j循環一次大概1ms}}void main(){ //這里看LED原理圖LPC_IOCON->JTAG_TMS_PIO1_00x01;//定義p1.0引腳為輸出LPC_IOCON->JTAG_TD…

iphone導出照片到電腦_iPhone里的照片如何快速導入電腦

前幾日我一好友發微信問我&#xff1a;“向陽&#xff0c;我手機里有一萬多張照片&#xff0c;怎么能快速的備份到電腦里&#xff1f;”我一看這問題&#xff0c;確實很多果友從用蘋果手機開始&#xff0c;機器已經更新換代了好多代了&#xff0c;照片是越來越多&#xff0c;內…

數據結構基礎:棧和隊列學習筆記

1、棧1.1 棧的定義棧是只能通過訪問它的一端來實現數據的存儲和檢索的一種特殊的線性數據結構。棧的修改要遵循先進后出的原則&#xff0c;這個是棧的核心。在棧中進行插入和刪除操作的一端稱為棧頂&#xff08;Top&#xff09;。另一端被稱為棧底&#xff08;bottom&#xff0…

Jquery高級編程

1.javascript具有等于&#xff08;&#xff09;和等同&#xff08;&#xff09;等號操作符是危險的&#xff0c;因為它在執行比較之前&#xff0c;強制執行類型轉換。 2.非侵擾式編程。 3.3.3Jquery的框架結構&#xff0c;待深入理解。 4.選擇器 a.元素選擇器&#xff08;元素屬…

C語言鏈表為什么倒著輸出,關于鏈表倒著存,正著輸出。

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓題目要求是你輸入a->b->c->d&#xff0c;然后存在內存里&#xff0c;然后改變在內存里的存儲&#xff0c;改成存d->c->b->a&#xff0c;然后輸出還是abcd&#xff0c;能不能就是用一個數組也存一份輸入的&#x…

idea @Autowired 注入爆紅(無法注入)

問題如下圖所示,idea Autowired 注入爆紅(無法注入) seettings ----> Editor Inspactions ----->spring ---->spring Core ----> Code ----> Autowring for Bean Class 去掉那個勾 效果如下