SQLite數據庫存儲(一)【安卓學習筆記】
標簽: Android
對于MODE_PRIVATE,MODE_APPEND兩種模式,對寫文件的影響有什么不同?
MODE_PRIVATE:該文件只能被當前程序讀寫,會把原來的內容覆蓋掉
MODE_APPEND:該文件的內容可追加,不會把原來的內容覆蓋掉,新寫的內容追加在文件后面
但是對于修改文件中的部分內容,應該怎么做呢?這就需要我們用到SQLite數據庫
主要內容:
- 創建和打開一個SQLite 數據庫
-
數據庫本身和它的表
- SQLite數據管理
-
增刪改查
SQLite介紹
-
輕量級的嵌入式本地數據庫 跨平臺(ios,android等系統中都有)
-
通過文件保存數據(而有些大型數據庫需要服務器進程來處理,tomcat等),導出之后的文件可以在別的平臺上使用
-
數據類型:null,integer,real,text,blob;
對于varchar(n),char(n),decimal(p,s),SQLite數據庫會自動轉換 -
SQLite相關的類:SQLiteOpenHelper,SQLiteDataBase,ListView
SQLiteOpenHelper:用于打開數據庫,如果存在數據庫就打開;如果不存在就創建數據庫
SQLiteDataBase:數據庫本身的對象,提供增刪改查的方法
ListView:把數據庫可視化
創建一個數據庫
SQLiteOpenHelper類:聲明一個類用于創建一個新的數據庫或者打開一個已存在的*.db file
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context){//構造方法:創建或打開數據庫文件“**.db”
super(context,"**.db",null,1);
//第一個參數:上下文
// 第二個參數:要打開或創建的數據庫名稱
//第三個參數:游標工廠
//第四個參數:數據庫的版本號
}
@Override
public void onCreate(SQLiteDatabase db) {//操縱數據(增刪改查)
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//數據庫升級操作
}
}
創建一個MyHelper類繼承SQLiteOpenHelper類,主要實現的方法有3個:
①public MyHelper(Context context)構造方法,對應父類的構造方法 super(context,"**.db",null,1)
第一個參數:上下文
第二個參數:要打開或創建的數據庫
第三個參數:游標工廠
第四個參數:數據庫的版本號
②public void onCreate(SQLiteDatabase db)數據庫數據管理(增刪改查,創建表)的操作基本都在這里完成
③public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)數據庫升級操作
第一個參數:數據庫對象
第二個參數:舊的版本號
第三個參數:新的版本號
例子:記錄玩家id和金幣數量
第一步:創建GameHelper類繼承SQLiteOpenHelper類
GameHelper.java
public class GameHelper extends SQLiteOpenHelper {
public GameHelper(Context context){//構造方法:創建或打開數據庫文件“game.db”
super(context,"game.db",null,1);
//第一個參數:上下文
// 第二個參數:要打開或創建的數據庫名稱
//第三個參數:游標工廠
//第四個參數:數據庫的版本號
}
@Override
public void onCreate(SQLiteDatabase db) {//插入表
String sql = "CREATE TABLE player(player_id VARCHAR(16),coin INTEGER)";//把關鍵字大寫,字段名小寫
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//數據庫升級操作
}
}
第二步:在MainActivity中操縱數據庫
MainActivity.java
打開數據庫:
package com.example.sqlitedatabase;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private GameHelper helper;
private static final String TAG="GameHelper";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper = new GameHelper(this.getApplicationContext());//把整個APP的上下文傳遞過去,不管MainActivity是死是活
Log.i(TAG,"open");
}
}
用new GameHelper(this.getApplicationContext())方法獲取GameHelper對象實例,GameHelper類需要一個上下文參數,這里我們把this.getApplicationContext()整個APP的上下文傳遞過去,增強它的穩定性。如果用this的話,我們進入或退出MainActivity會對其穩定性產生影響
當我們創建數據庫的時候,首先調用的是GameHelper類中的public GameHelper(Context context)這個構造方法,如果數據庫的版本號與1相匹配,則直接打開,然后調用onCreate()方法;如果數據庫的版本號與1不匹配,則調用onUpgrade()方法,進行升級操作。
需要注意的是,GameHelper類就是一個普通的類,與四大組件不同,它不會在AndroidManifest.xml文件中產生GameHepler節點
數據庫管理
SQLiteDatabase db = helper.getWritableDatabase();
SQLiteDatabase類提供數據管理方法(創建表增刪改查)
execSQL(SQL指令) 方法用來執行SQL語句
1.增加insert操作
①SQLiteDatabase db=helper.getWritableDatabase();
②ContentValues value = new ContentValues();
③value.put(“name”,name);
④long id = db.insert(TableName,null,value);
⑤db.close()
用ContentValues對象存儲臨時數據,它相當于數據庫中的一條記錄
它也采用鍵值對的方式存儲數據
Insert(tablename,null,values)方法用來插入數據,第一個參數是數據表的名稱,第二個參數是要發現插入的行為空時就將這個列對應的值設置為null,第三個參數為ContentValues對象
示例:在文本編輯框輸入玩家id和金幣數量,點擊ADD按鈕,把數據存入SQLite數據庫
MainActivity.java
注意:Values.put(key,value)方法中的key必須與數據庫中的字段名一致
coin金幣值的類型是int,我們要把et_coin中的文本轉換成String類型,再把String類型轉換成int類型。
這里涉及到的一個知識點是:如何把EditText的文本轉換成int類型?Integer.parseInt(et_coin.getText().toString().trim())
先用getText()方法獲取文本內容,toString()方法轉換成String類型,再用Integer.parseInt()方法把String類型轉換成int類型
Insert()方法返回插入數據的位置,是long類型的
2.刪除delete操作
①SQLiteDatabase db = helper.getWriteDatabase();
②int deleted_num=db.delete(TableName,“name=?”,new String[]{name});
③db.close();
Delete()方法中第一個參數是數據表名稱,第二個參數是刪除操作的條件這里是根據name來刪除,第三個參數是條件篩選的值
3.更新update操作
①SQLiteDatabase db = helper.getWritableDatabase();
②ContentValues value = new ContentValues();
③value.put(“score”,score);
④long id = db.update(TableName,value,“name=?”,new String[]{name});
⑤db.close();
Update()方法中第一個參數是數據表名,第二個參數是更新的數據,第三個參數是更新條件,第四個參數是更新條件的值
智能推薦
iOS - OC SQLite 數據庫存儲
http://www.cnblogs.com/QianChia/p/5782861.html 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫,應用 iOS 中,跟前三種保存方式相比,相對比較復雜一些。 注意:寫入數據庫,字符串可以采用 char 方式,而從數據庫中取出 char 類型,當 char 類型有表示中文字符時,會出現亂碼。這是因為數據庫默認使用 ASCII 編碼方...
安卓數據存儲方式之SQLite
1.知識圖譜 數據庫的增刪查改的功能實現模板 連接數據庫,首先得在java下新建一個.db包,在新建的db包下新建一個.db文件 DbHelper.java的代碼如下: xml代碼 JAVA代碼...
Android數據存儲_SQLite數據庫存儲
Android數據存儲的方式有種,主要有三種。分別為:文件存儲,SharedPreference存儲,以及數據庫存儲。 這篇主要講SQLite數據庫存儲。 1.基本描述 Android自帶了一種輕量級數據庫SQLite。SQLite是一款輕量級的關系型數據庫,他的運算速度非常快,占用資源很少,通常只需要占用幾百K的資源就足夠了,因而特別適合在...
安卓數據庫——SQLite使用
1.建數據庫,數據庫適配器,寫增刪改查方法: import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqli...
安卓學習筆記——SQLite學習
SQLite簡介: 開源關系型數據庫,運算速度快,占用資源少,在內存上只有幾百k的存儲空間,非常適用于移動端。 SQLite特點 占用空間小 運行高效 可移植性好 支持標準SQL語法 支持ACID事務 零配置:無需安裝和網絡管理配置 支持多種開發語言,C, PHP, Perl, Java, C#,Python SQLite沒有服務器進程,它通過文件保存數據,該文件是跨平臺的,可以放在其他平臺中使用...
猜你喜歡
QML使用Sqlite數據庫存儲ListModel數據
(本文為utf-8格式,可以直接使用相應代碼) Models 是用來提供數據的,它既可以以 QML 的形式出現也可以是 C++的類。QML中的Model有ListModel、XmlListModel、 VisualItemModel;C++ 中的 Model 有 QAbstractItemModel、QStringList、 QList<QObject*>等。...
安卓開發入門教程-數據存儲_SQLite數據庫
關注 安卓007 ,免費獲取全套安卓開發學習資料 什么是SQLite數據庫 SQLite數據庫是適合在移動設備上使用的輕量型關系型數據庫,速度快,占用空間小.與SharedPreferences適合存儲少量簡單類型數據相反,SQLite數據庫適合存儲大量復雜類型的數據. 安卓原生提供了操作數據庫的API接口,但是操作較為繁雜,于是涌現了大量第三方的開源操作庫,如GreenDAO、Realm等.但G...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...