• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓學習筆記——SQLite學習

    標簽: android  java

    SQLite簡介:

    開源關系型數據庫,運算速度快占用資源少,在內存上只有幾百k的存儲空間,非常適用于移動端

    SQLite特點

    占用空間小
    運行高效
    可移植性好
    支持標準SQL語法
    支持ACID事務
    零配置:無需安裝和網絡管理配置
    支持多種開發語言,C, PHP, Perl, Java, C#,Python
    SQLite沒有服務器進程,它通過文件保存數據,該文件是跨平臺的,可以放在其他平臺中使用。

    SQLite能解析大部分標準SQL語句如:

    1、查詢語句:

    select * from 表名 where 條件子句 group by 分組子句 having … order by 排序子句
    如:select * from person order by id desc

    2、插入語句:

    insert into 表名(字段列表) values(值列表)。
    如: insert into person(name, age) values(‘張三’,3)

    3、更新語句:

    update 表名 set 字段名=值 where 條件子句。
    如:update person set name=‘李四‘ where id=10

    4、刪除語句:delete from 表名 where 條件子句。

    如:delete from person where id=10

    SQLite相關類

    SQLiteOpenHelper(管理數據庫的創建和版本更新):

    抽象類,我們通過繼承該類,然后重寫數據庫及表創建以及更新的方法, 我們還可以通過該類的對象獲得數據庫實例,或者關閉數據庫。

    SQLiteDatabase(完成數據庫中的增刪改查的操作):

    數據庫訪問類,我們可以通過該類的對象來對數據庫中的表進行增刪改查的操作,類似jdbc的Connection和Preparement的結合體

    Cursor:

    游標,有點類似于JDBC里的resultset結果集,可以簡單理解為指向數據庫中某 一個記錄的指針

    SQLite相關類的使用:

    SQLiteOpenHelper類:

    使用方法:通過一個子類繼承該類,再通過其中的方法來對數據庫進行操作

    具體流程:

    Step 1:自定義一個類繼承SQLiteOpenHelper類
    Step 2:在該類的構造方法中設置好要創建的數據庫名,版本號
    Step 3:重寫onCreate( )方法創建表結構
    Step 4:重寫onUpgrade( )方法定義版本號發生改變后執行的操作

    常用方法

    1、public SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version):

    構造方法,一般需要傳遞一個創建的數據庫名稱即name參數,版本號version最小為1.

    參數:
              context  用來打開或創建數據庫
              name    數據庫文件名
              factory     用來創建對象游標,或者默認為null
              version     數據庫的序號(從1開始)
    

    2、abstract void onCreate(SQLiteDatabase db):

    當第一次創建數據庫時回調的方法,可以完成創建數據庫表結構及添加一些應用使用到的初始化數據等功能。創建的數據庫放在/data/data//database目錄下。

    3.abstract void onUpgrade(SQLiteDatabase db,int OldVersion,int new Version)

    當數據庫版本更新時回調該方法。

    4. Synchronized SQLiteDatabase getReadableDatabase():

    以可讀的方式打開數據庫,返回對應的SQLiteDatabase對象。

    5. Synchronized SQLiteDatabase getWritableDatabase():

    以可讀寫的方式打開數據庫,返回對應的SQLiteDatabase對象。

    6.Synchronized void close():

    關閉所有打開的SQLiteDatabase。

    實例:

    public class PersonSQLiteOpenHelper extends SQLiteOpenHelper{
    	//數據庫的構造方法,用來定義數據庫的名稱,數據庫查詢的結果集,數據庫的版本
    	public PersonSQLiteOpenHelper(Context context){
    		super(context,”person.db”,null,5);
    	}
    	//數據庫第一次被創建時調用該方法
    	public void onCreate(SQLiteDatabase db){
    		//初始化數據庫的表結構,執行一條建表的SQL語句
    		db.execSQL(“create table person(id integer primary key autoincrement,)”+”name varchar(20),”+”number varchar(20))”);
    	}
    	//當數據庫的版本號增加時調用
    	public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
    		db.execSQL(“alter table person add account varchar(20)”);
    	}
    }
    

    SQLiteDatabase

    SQLiteDatabase常用方法:

    在這里插入圖片描述

    public static SQLiteDatabase openDatabase (String path, SQLiteDatabase.CursorFactory factory, int flags)

    打開path路徑文件所代表的數據庫,返回值是數據庫SQLiteDatabase 對象。如果數據庫不存在則拋出FileNotFoundException 異常。

    參數解釋:

    path:指定路徑的數據庫文件,如”/data/data/com.ssh.sql/databases/game.db”
    factory:構造查詢時的游標對象,當查詢(query)被提交時,該對象會被調用來實例化一個游標,如果指定該參數為null,則使用默認游標
    flags:參數控制數據庫的訪問模式有4種,多個模式組合用|隔離:
    OPEN_READWRITE:以可讀寫方式打開數據庫
    OPEN_READONLY :以只讀方式打開數據庫
    CREATE_IF_NECESSARY:檢查數據庫是否存在,若不存在,則創建數據庫
    NO_LOCALIZED_COLLATORS:打開數據庫時,不按照本地化語言對數據進行排序

    示例:

    SQLiteDatabase  db= SQLiteDatabase.openDatabase      ("databases/myDBase.db", null, SQLiteDatabase. OPEN_READWRITE| SQLiteDatabase. CREATE_IF_NECESSARY);
    

    public static SQLiteDatabase openOrCreateDatabase (String path, SQLiteDatabase.CursorFactory factory)

    打開或創建path文件所代表的SQLite數據庫,返回值是SQLiteDatabase對象。

    public static SQLiteDatabase openOrCreateDatabase (File file, SQLiteDatabase.CursorFactory factory)

    打開或創建file文件所代表的SQLite數據庫,返回值是SQLiteDatabase對象。

    示例:

    SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase("/sdcard/mydatabase.db", null);
    
    在程序中獲取SQLiteDatabase對象后,接下來就可以調用對象的方法操作數據庫。

    1、創建表

    SQLite沒有提供專門的方法創建表,可通過execSQL()方法指定SQL語句來創建表。

    示例:

    //創建表的SQL語句
    String SQL_CT=“CREATE  TABLE student (ID INTEGER PRIMARY KEY,age INTEGER,name TEXT)”;
    //執行該SQL語句創建表
    db.execSQL(SQL_CT);
    

    2、刪除表

    通過execSQL()方法指定SQL語句來刪除表。

    示例:

    //創建表的SQL語句
    String SQL_DROP=“DROP  TABLE student”;
    //刪除表
    db.execSQL(SQL_DROP);
    

    3、插入一條記錄

    向表中插入記錄有兩種實現方式:insert()方法和execSQL()方法

    ①、insert()方法:

    long insert(String table,String nullColumnHack, ContentValues values): 向表中插入數據,返回新插入行號。
    table:想插入數據的表名
    nullColumnHack:強行插入null值的數據列的列名。
    values:代表一行記錄的數據。ContentValues是存取數據的類。put(String key,XXX val)方法來進行插入值的設置,其中key為列名,val的值可以為SQLite支持的數據類型。

    示例:

    //創建ContentValues 對象
    ContentValues values = new ContentValues();
    //往該對象里放鍵值對
    values.put(“ID”, 1);
    values.put(“name”, “張三豐");
    values.put("age", 26);
    //插入數據
    long rowid = db.insert(“student”, null, values);//返回新添記錄的行號,與主鍵id無關
    

    ②、execSQL()方法

    首先要編寫插入數據的SQL語句;
    然后執行execSQL()方法
    public void execSQL(String sql) throws SQLException
    public void execSQL(String sql, Object[] bindArgs) throws SQLException

    示例:

    //第一種方法是寫入固定數據
    //定義插入SQL語句
    String SQL_INSERT=“INSERT INTO student (ID,age,name)  values (1,26,’張三豐’)”;
    //調用execSQL()方法執行SQL語句,將數據插入到student表
    db.execSQL(SQL_INSERT);
    
    //第二種方法數據寫入是靈活的,可以拼從頁面上獲取的數據String SQL_INSERT=“INSERT INTO student (ID,age,name)  values (?,?,?)”;
    db.execSQL(SQL_INSERT,new String[]{“1”, “26”, “張三豐”});
    

    4、更新一條記錄:

    實現方式:update()方法和execSQL()方法。

    ①、update()方法

    public int update(String table,ContentValues values,String whereClause,String[] whereArgs): 更新表中指定的數據。該方法返回受此update語句影響的記錄的條數。
    參數解釋:
    table:想要更新數據的表名
    values:想要更新的數據
    whereClause:更新的條件,滿足該where子句的記錄將會被更新。如果為null,則所有行都將更新。
    whereArgs:為where子句傳入的參數。

    示例:修改張三豐的姓名和年齡。

    ContentValues values=new ContentValues();
    values.put(“name”, “張豐");
    values.put("age", 20);
    db.update(“student”, values, “name=?”, new String[]{“張三豐”});
    

    ②、execSQL()方法

    首先要編寫插入數據的SQL語句;
    然后執行execSQL()方法
    public void execSQL(String sql) throws SQLException
    public void execSQL(String sql, Object[] bindArgs) throws SQLException

    //定義更新SQL語句
    String SQL_UPDATE=“UPDATE  student SET age=20 where name=‘張三豐’”;
    //調用execSQL()方法執行SQL語句,更新student表里的數據
    db.execSQL(SQL_UPDATE);
    //定義更新SQL語句
    String SQL_UPDATE=“UPDATE  student SET age=? where name=?”;
    //調用execSQL()方法執行SQL語句,更新student表里的數據
    db.execSQL(SQL_UPDATE,new Object[]{20,”張三豐”});
    

    5、刪除記錄:

    實現方式:delete()方法和execSQL()方法。

    ①、delete()

    int delete(String table,String whereClause,String[] whereArgs): 刪除表中指定的數據。返回值為刪除的行數,0時代表失敗。
    參數解釋:
    table:要對其進行刪除操作的表名
    whereClause:刪除條件
    whereArgs:刪除條件參數數組

    示例:

    db.delete(“student”, “name=?”, new String[]{“張三豐”});
    

    ②、execSQL()方法

    //定義刪除語句
    String SQL_Del=“delete from student where id=10”;
    //調用execSQL()方法執行SQL語句,刪除student表里對應的數據
    db.execSQL(SQL_Del);

    版權聲明:本文為fuzhijieabc原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/fuzhijieabc/article/details/110824798

    智能推薦

    安卓學習筆記:ListView的用法

    ListView顯示列表數據,內容可以簡單的就是一行行的字符串,也可以復雜到每一行數據就是包含特定排版格式的數字、字符串、圖像等的組合。 簡單的純字符串的ListView的使用方法如下: 1.先引用在布局中設計好的ListView組件: 2.準備好ListView要使用的字符串數據,由于字符串好多個(一行一行的),所以字符串數據要封裝在ArrayAdapter中:例如: 3.listview組件使...

    安卓學習筆記之Content provider

    安卓四大組件之 content provider 用途 跨程序共享數據(為其他應用程序提供訪問數據的接口) 利用Content Provider對數據進行封裝,有利于脫離對數據庫的依賴性(解耦)。改變底層數據庫,而上層數據查詢不用改變。 什么是Content Provider? 使用安卓存儲有五種方式,分別是 文件 網絡存儲 數據庫 content provider sharedpreferenc...

    安卓學習筆記之Handler

    UI線程 當系統啟動的時候,就會創建一個主線程(Main Thread),然后這個主線程向UI組件分發事件,主線程和UI的組件進行交互,故稱UI線程。 線程安全 Android的UI線程是不安全的。引用一下,百度百科的解釋 線程安全就是多線程訪問時,采用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。 線...

    安卓學習筆記之Okhttp

    什么是okhttp? 我們如果原生的去寫一個網絡請求,需要用到的是HttpConnection等相關類去實現的,但是編寫原生的網絡請求,需要我們來實現更多復雜的功能,比如斷點續傳,都需要花費很長的時間去寫。效率也不高。所以我們為了方便在開發過程中能夠省電精力,需要運用到第三方網絡框架,那就是Okhttp。 Okhttp的使用 manifest添加網絡權限 < uses-permission ...

    安卓學習筆記之IntentService

    什么是IntentService 它會創建一個獨立的子線程來處理所有的Intent請求,創建的子線程來處理onHandleIntent()實現的代碼,無需處理多線程的問題。默認實現onBind()方法,返回為null;默認實現onStartCommand()方法,將請求的Intent添加到隊列中。這個類實際上是繼承自service,內部是封裝了HandlerThread和Handler類。 代碼實...

    猜你喜歡

    安卓學習筆記之Activity(一)

    ** 安卓四大組件之Activity ** 1.介紹 ** Activity的出現無處不在,從手機開始啟動的第一個頁面的都是Activity。主要用于可見的狀態與用戶進行交互。好比一張紙,我們需要用代碼這只“筆”來描繪一些信息告訴讀者,這張紙里面有些什么內容和需要操作什么東西。總的來說就是能看到的基本上和Activity。如果有什么錯誤的地方,希望大家指出。感激不盡。 既然...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡