Android中的數據庫

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

1.1. 什么時候使用數據庫

有大量相似結構的數據需要存儲的時候就可以使用數據庫。

1.2. SQLite的簡介

SQLite是一款輕量級的數據庫。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它。Android系統和iOS系統中都嵌入了SQLite數據庫。

1.3. SQLite數據庫的創建流程

(1) 定義一個類繼承SQLiteOpenHelper。?
(2) 添加一個構造函數:

public MyOpenHelper(Context context) {super(context, "test.db", null,1);
}
  • 1
  • 2
  • 3
  • 4

第2行,調用父類的構造方法。?
參數1代表上下文,?
參數2代表數據庫的名字,?
參數3代表游標工廠,通常為null,?
參數4代表數據庫版本,從1開始。

(3) 實現oncreate(),和onUpgrade()方法。

1.4. onCreate()和onUpgrade()方法

onCreate()方法是當數據庫第一次創建的時候調用,這個方法適合做表結構的初始化,創建表也就是編寫sql語句。

@Override
public void onCreate(SQLiteDatabase db) {db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
}
  • 1
  • 2
  • 3
  • 4
  • 5

第3行,執行sql語句。?
onUpgrade()方法是當數據庫版本升級的時候調用,一般在方法中做表結構的更新:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("alter table info add phone varchar(20)");
}
  • 1
  • 2
  • 3
  • 4
  • 5

1.5. 獲取數據庫對象

通過getWritableDatabase()和getReadableDatabase()獲取數據庫對象。

方法解釋
getWritableDatabase()打開或者創建數據庫用來讀和寫,如果是第一次就是創建。
getReadableDatabase()打開或者創建數據庫,和getWritableDatabases()一樣,如果是第一次就是創建,除非發生某些問題如果磁盤滿了,那么就返回只讀的數據庫對象。

2. 使用sql語句增刪改查

缺點:?
1.sql語句容易寫錯;?
2.執行sql語句沒有返回值。

2.1. 插入記錄

public void click1(View v){SQLiteDatabase db = myOpenHelper.getWritableDatabase();db.execSQL("insert into info(name,phone) values(?,?)", new Object[]{"張三","1388888"});db.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第2行,獲取數據庫對象;?
第3行,執行sql語句,向info表中插入一條記錄;?
第5行,關閉數據庫。

2.2. 刪除記錄

public void click2(View v){SQLiteDatabase db = myOpenHelper.getWritableDatabase();db.execSQL("delete from info where name=?", new Object[]{"張三"});db.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3. 修改數據

public void click3(View v){SQLiteDatabase db = myOpenHelper.getWritableDatabase();db.execSQL("update info set phone=? where name=? ",new Object[]{"138888888","張三"});db.close();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.4. 查找

//查找
public void click4(View v){SQLiteDatabase db = myOpenHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from info", null);if (cursor!= null&&cursor.getCount()>0) {while(cursor.moveToNext()){//columnIndex代表列的索引 String name = cursor.getString(1);String phone = cursor.getString(2);System.out.println("name:"+name+"----"+phone);}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Cursor游標是從第一條數據之前開始的?
第5行,cursor.getCount()獲取記錄數;?
第6行,cursor.moveToNext(),將游標移動到下一條記錄,如果有記錄則返回true,如果沒有則返回false。

3. 使用谷歌封裝好的api增刪改查

優點:?
???????寫法簡單,不需要復雜的sql語句,不容易寫錯;?
???????有返回值方便開發者開發。?
缺點:?
???????如果有多張表,使用谷歌封裝的api不容易進行查詢。

3.1. 插入記錄

public void click1(View v) {SQLiteDatabase db = myOpenHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name", "王五");values.put("phone", "110");long insert = db.insert("info", null, values); db.close();if (insert > 0) {Toast.makeText(getApplicationContext(), "添加成功", 1).show();} else {Toast.makeText(getApplicationContext(), "添加fail", 1).show();}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第3行,ContentValues內部封裝了一個map,key是對應列的名字,value對應值;?
第6行,insert()方法返回值代表插入新行的id,如果該返回值數值大于0,那么久插入成功,其底層就是在組拼sql語句。

3.2. 刪除記錄

public void click2(View v) {SQLiteDatabase db = myOpenHelper.getWritableDatabase();int delete = db.delete("info", "name=?", new String[] { "王五" });db.close();Toast.makeText(getApplicationContext(), "刪除了" + delete + "行", 0).show();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第3行delete()方法返回值代表影響的行數。

3.3. 修改數據

public void click3(View v) {SQLiteDatabase db = myOpenHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("phone", "114");int update = db.update("info", values, "name=?", new String[] { "王五" });db.close();Toast.makeText(getApplicationContext(), "更新了" + update + "行", 0).show();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第5行,update()方法返回值代表更新了多少行。

3.4. 查找

public void click4(View v) {SQLiteDatabase db = myOpenHelper.getReadableDatabase();Cursor cursor = db.query("info", null, null, null, null, null, null);if (cursor != null && cursor.getCount() > 0) {while (cursor.moveToNext()) {String name = cursor.getString(1);String phone = cursor.getString(2);}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

第3行,query方法返回查詢到的Cursor,Cursor就是查詢到的結果集。方法參數代表的含義:

參數含義
table查詢的表名
columns查詢的列
selection查詢條件,一般會使用占位符如:”name=?”
selectionArgs查詢條件的參數
groupBy分組
orderBy排序 desc(降序) asc(升序)

4. 使用命令行工具 sqlite3

打開cmd命令行工具,輸入adb shell命令掛載到linux空間。?
進入data/data目錄下,輸入命令cd data/data。?
ls列出所有目錄:?
這里寫圖片描述?
進入我們應用的包名目錄下,cd+包名。?
然后進入databases目錄下:?
這里寫圖片描述?
打開數據庫,sqlite3+數據庫名稱:?
這里寫圖片描述?
執行sql語句進行操作:?
這里寫圖片描述?
改變dos的編碼方式:?
改成gbk編碼方式:chcp 936;?
改成utf-8編碼方式:chcp 65001。

轉載于:https://my.oschina.net/u/2884845/blog/740725

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

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

相關文章

python計算績效工資_python實現 --工資管理系統

原博文 2017-07-25 22:41 ? # -*- coding: utf-8 -*- __author__ hjianli # import re import os info_message """Alex 100000 Rain 80000 Egon 50000 Yuan 30000 """ #序列字典 xulie_...01669 相關推薦 2019-09-28 21:13 ? Python python…

為Windows Server 2012 R2指定授權服務器

為Windows Server 2012 R2指定授權服務器在Windows Server 2008 R2的終端服務中,可以手動指定授權服務器,而在Windows Server 2012 R2中,默認只能通過"遠程桌面連接服務"管理器,指定授權服務器,而要使用遠程…

spring5高級編程_Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新

簡介是什么讓java世界變得更好,程序員變得更友愛,禿頭率變得不是那么的高,讓程序員不必再每天996,有時間找個女朋友?是Spring。是什么讓企業級java應用變得簡單易懂,降低了java程序員的進入門檻&#xff0c…

關于resolve非泛型方法不能與類型實參一起使用

今天mvc新建三層時,寫到bll層中一直報下面的錯誤,檢查了幾遍趕腳并沒有什么錯。最后發現缺少一些引用。 如下面的圖,少添加了下面的兩個引用.Unity是微軟模式與實踐團隊開發的一個輕量級、可擴展的依賴注入容器, Microsoft.Practices.Unity.C…

設計模式-Singleton

2019獨角獸企業重金招聘Python工程師標準>>> Singleton算是知道的設計模式中最簡單的最方便實現的了,模式實現了對于類提供唯一實例的方法,在很多系統中都會用到此模式。在實際項目中使用全局變量,或者靜態函數等方式也可以達到這…

dump分析工具_Java應用CPU過高,如何排查?參考解決思路和常用工具總結

本文總結了一些常見的線上應急現象和對應排查步驟和工具。分享的主要目的是想讓對線上問題接觸少的同學有個預先認知,免得在遇到實際問題時手忙腳亂。畢竟作者自己也是從手忙腳亂時走過來的。只不過這里先提示一下。在線上應急過程中要記住,只有一個總體…

st官網下載stm32固件庫方法

進入www.st.com官網------把網站改成中文(就在右上方)----點擊產品-----選擇右側的微控制器選項------選擇左側的STM32 32位ARM CortexMCU-----選擇左側的STM32F1系列-----選擇STM32103-----選擇中間部分mcu對應型號(我用的是STM32F103ZE)---…

mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated

解決方法1&#xff1a;在php程序代碼里面設置報警級別 <?php error_reporting E_ALL & ~E_DEPRECATED 方法2&#xff1a;禁止php報錯 display_errors On 改為 display_errors Off 方法3&#xff1a;使用mysqli或者PDO 建議大家盡快取消mysql&#xff0c;全部都走…

JavaScript強化教程 —— Cocos2d-JS極速調試技巧

本文為 H5EDU 機構官方 HTML5培訓 教程&#xff0c;主要介紹&#xff1a;JavaScript強化教程 —— Cocos2d-JS極速調試技巧 本文教大家一個調試Cocos2d-JS的小技巧&#xff0c;我都是這么用的&#xff0c;特意來告訴大家這個輕量快速的調試技巧。1.首先我們需要安裝官方的cocos…

dos攻擊命令_Kali Linux系列之拒絕服務攻擊(DOS)實戰(上)

(你的世界是個什么樣的世界&#xff1f;你說&#xff0c;我們傾聽!)-----------------小百科拒絕服務攻擊即是攻擊者想辦法讓目標機器停止提供服務&#xff0c;是黑客常用的攻擊手段之一。其實對網絡帶寬進行的消耗性攻擊只是拒絕服務攻擊的一小部分&#xff0c;只要能夠對目標…

stm32定時器配置

stm32通用定時器 STM32的定時器是個強大的模塊&#xff0c;定時器使用的頻率也是很高的&#xff0c;定時器可以做一些基本的定時&#xff0c;還可以做PWM輸出或者輸入捕獲功能。 時鐘源問題&#xff1a; 名為TIMx的有八個&#xff0c;其中TIM1和TIM8掛在APB2總線上&#xff0c;…

SQL 養成一個好習慣是一筆財富

來源&#xff1a;MR_ke 鏈接&#xff1a;http://www.cnblogs.com/MR_ke/archive/2011/05/29/2062085.html 我們做軟件開發的&#xff0c;大部分人都離不開跟數據庫打交道&#xff0c;特別是erp開發的&#xff0c;跟數據庫打交道更是頻繁&#xff0c;存儲過程動不動就是上千行&a…

【JAVA】StringTokenizer 迭代方式對字符串進行分割

StringTokenizer是一個用來分隔String的應用類&#xff0c;相當于VB的split函數。1.構造函數public StringTokenizer(String str)public StringTokenizer(String str, String delim)public StringTokenizer(String str, String delim, boolean returnDelims)第一個參數就是要分…

python數組定義_python定義數組

廣告關閉 騰訊云11.11云上盛惠 &#xff0c;精選熱門產品助力上云&#xff0c;云服務器首年88元起&#xff0c;買的越多返的越多&#xff0c;最高返5000元&#xff01; 一、一維數組 1. 直接定義matrix2. 間接定義matrixprint(matrix)輸出&#xff1a;3. 數組乘法matrix*5print…

Android-語言設置流程分析

Android手機語言切換行為&#xff0c;是通過設置-語言和輸入法-語言來改變手機的語言&#xff0c;其實這個功能很少被用戶使用。 以Android5.1工程源碼為基礎,從設置app入手來分析和學習語言切換的過程:一、語言設置界面&#xff1a;首先在設置app中找到語言設置這個Preference…

charles 安裝 ssl_最全面的解決Charles手機抓包的證書問題(步驟非常詳細)

源自公眾號文章: 徹底解決Charles手機抓包的證書問題簡介: Charles 抓包是日常開發當中經常會用到的技術, 在 Android 6 之前, 手機系統既信任系統內置的證書, 也信任用戶自己安裝的證書, 但是在 Android 7 之后, 卻發生了變化, 手機系統只信任系統內置的根證書. 當然了, 這是為…

oracle報錯:ORA-00054: 資源正忙,要求指定 NOWAIT

ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源&#xff1a; --首先得到被鎖對象的session_idselect session_id from v$locked_object; --通過上面得到的session_id去取得v$session的sid和serial#&#xff0c;然后對該進程進行終止。--SELECT sid, serial#, username, o…

ARM中ROM,RAM,FLASH區別

RAM&#xff08;Random Access Memory&#xff09;的全名為隨機存取記憶體&#xff0c;它相當于PC機上的移動存儲&#xff0c;用來存儲和保存數據的。它在任何時候都可以讀寫&#xff0c;RAM通常是作為操作系統或其他正在運行程序的臨時存儲介質&#xff08;可稱作系統內存&…

excel 2007 vba與宏完全剖析_Excel宏VBA小技巧系列 | 分段加合

寫在前面的話 知識產權算是一個盛產數據的行業。專利啊商標啊著作啊&#xff0c;都有著錄項目。我們常說的專利分析、產業導航、企業導航、產業預警、競爭情報、技術綜述、知識產權評議等等&#xff0c;常規操作之一就要先處理著錄項目數據&#xff0c;然后再進行不同角度的分…

SecureCRT:保存輸出日志的方法

處理地址&#xff1a; http://blog.sina.com.cn/s/blog_64c1dd210101gzgz.html 或者&#xff1a; http://renchen.blog.51cto.com/4531967/1195862 重點在與設定文檔的文件名稱&#xff0c;里面有說明。 http://renchen.blog.51cto.com/4531967/1195862轉載于:https://www.cnbl…