• <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基礎學習

    SQLite是一款輕量級數據庫,集成于android中,以下從分享一下自己學習的。

    在查閱資料時有一些好的說明就直接用了:
    主要的curd語句

    以下SQL語句獲取5條記錄,跳過前面3條記錄
    select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
    插入語句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘atm’,3)
    更新語句:update 表名 set 字段名=值 where 條件子句。如:update person set name=‘atm‘ where id=1
    刪除語句:delete from 表名 where 條件子句。

    如:delete from person where id=1

    getWritableDatabase()和getReadableDatabase()的差別

    getWritableDatabase()getReadableDatabase()方法都能夠獲取一個用于操作數據庫的SQLiteDatabase實例。

    getWritableDatabase() 方法以讀寫方式打開數據庫,一旦數據庫的磁盤空間滿了,數據庫就僅僅能讀而不能寫,倘若使用getWritableDatabase()打開數據庫就會出錯。getReadableDatabase()方法先以讀寫方式打開數據庫,假設數據庫的磁盤空間滿了,就會打開失敗,當打開失敗后會繼續嘗試以僅僅讀方式打開數據庫。

    注意:getWritableDatabase()getReadableDatabase的差別是當數據庫寫滿時,調用前者會報錯,調用后者不會。所以假設不是更新數據庫的話,最好調用后者來獲得數據庫連接。

    Cursor的簡單說明

    無論你怎樣運行查詢,都會返回一個 Cursor,這是 Android 的 SQLite 數據庫游標,使用游標,你能夠:
    通過使用 getCount() 方法得到結果集中有多少記錄。
    通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷全部記錄;
    通過 getColumnNames() 得到字段名;
    通過 getColumnIndex() 轉換成字段號;
    通過 getString()getInt() 等方法得到給定字段當前記錄的值;
    通過 requery() 方法又一次運行查詢得到游標;
    通過 close() 方法釋放游標資源;
    
    提示:數據庫中讀取到的數據在cursor中。在寫入到對象中時。要先推斷cursor中是否有數據,否則當查詢結果為空集時會報錯。
    
    推斷cursor為空時。不能夠用cursor==null,及時cursor中沒有數據,cursor也不為空。

    須要用cursor.getCount()函數來推斷是否為空,結果為0時為空。

    具體的代碼:

    首先:怎樣創建數據庫
    創建數據庫和表。
    數據庫的默認保存路徑為:“data/data/com.example.SqliteTest/databases/”
    com.example.SqliteTest就是自己的project

    public class DBOpenHelp extends SQLiteOpenHelper {
        public DBOpenHelp(Context context) {
    
            super(context, "User_atm.db", null, 1);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
    StringBuilder strSql = new StringBuilder();
    strSql.append("CREATE TABLE IF NOT EXISTS user_info (");
    strSql.append("user_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,");
    strSql.append("user_age   INT NOT NULL,");
    strSql.append("user_name  VARCHAR(50)  NOT NULL)");
            db.execSQL(strSql.toString());
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            //數據庫改動是在這里操作。比方添加表字段
        }
    

    以下是增刪改查以及事務的代碼:

    public class ServiceTest {
    
        //增刪改查
    
        //得到數據庫
    
        DBOpenHelp dbOpenHelp;
    
        public ServiceTest(Context context) {
            super();
            this.dbOpenHelp = new DBOpenHelp(context);
        }
    
        //啟動事務
        public void TransactionTest(){
            SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
            db.beginTransaction();
            try{
                db.execSQL("update User_info set user_age=user_age+1 where user_id=10");
                db.execSQL("update User_info set user_age=user_age-1 where user_id=11");
                db.setTransactionSuccessful();
            }finally{
                db.endTransaction();}
        }
    
    
        //增
        public void save(UserInfo userinfo){
            SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
            db.execSQL("insert into user_info(user_id, user_age, user_name) values(?,?,?

    )"

    , new Object[]{userinfo.getUser_id(),userinfo.getUser_age(), userinfo.getUser_name()}); } //刪 public void delete(Integer user_id){ SQLiteDatabase db = dbOpenHelp.getWritableDatabase(); db.execSQL("delete from user_info where user_id=?

    "

    , new Object[]{user_id}); } //改動 public void update(UserInfo userinfo){ SQLiteDatabase db = dbOpenHelp.getWritableDatabase(); db.execSQL("update user_info set user_age=?,user_name=? where user_id=?", new Object[]{userinfo.getUser_age(), userinfo.getUser_name(),userinfo.getUser_id()}); } //查詢 public UserInfo find(Integer id){ SQLiteDatabase db = dbOpenHelp.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from user_info where user_id=?

    "

    , new String[]{id.toString()}); if(cursor.moveToFirst()){ int user_id = cursor.getInt(cursor.getColumnIndex("user_id")); int user_age = cursor.getInt(cursor.getColumnIndex("user_age")); String user_name = cursor.getString(cursor.getColumnIndex("user_name")); return new UserInfo(user_id, user_name, user_age); } cursor.close(); return null; } }

    可視化的數據庫管理工具–SQLite Expert Professional
    自己能夠在網上下載。
    下載后打開軟件,進入主界面:
    這里寫圖片描寫敘述

    上圖中紅色框部分為導入和刪除數據庫。

    這里寫圖片描寫敘述

    上圖中為新建表。

    還有非常多功能,能夠在改動完后,從新導入到設備中(最開始到處的路徑)。

    通過cmd查看數據庫
    打開制定路徑下的數據庫
    這里寫圖片描寫敘述

    簡單的數據庫操作。查詢一張表。

    這里寫圖片描寫敘述

    SQLite觸發器:android:SQLite–觸發器具體解釋

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

    智能推薦

    SQLite基礎學習(三)--比較JAVA讀文本文件和讀SQLite文件的區別

    1.編程實現通過文本文件進行鄭碼查詢 1)任務要求: 將碼表放在文本文件zmb.txt中,編寫程序進行鄭碼查詢,如輸入aacm,則輸出“無可奉告”。 鄭碼表如下所示: 2)源代碼 3)編譯、運行結果 2.編程實現通過SQLite數據表進行鄭碼查詢 1)用SQLite Expert Professional在yao.db數據庫下創建名為zmb的數據表。 2)源代碼 3)編譯、...

    sqlite庫學習(7)sqlite讀取

    下載地址:https://download.csdn.net/download/no2101/12428235。 1、sqlite3_exec 需要callback 2、sqlite3_get_table 速度比較慢,不建議使用。 3、sqlite3_prepare_v2  ...

    sqlite庫學習(6)sqlite快速插入

      1、介紹 SQLite數據庫本質上來講就是一個磁盤上的文件,所以一切的數據庫操作其實都會轉化為對文件的操作,而頻繁的文件操作將會是一個很好時的過程,會極大地影響數據庫存取的速度。例如:向數據庫中插入100萬條數據,在默認的情況下如果僅僅是執行query.exec(“insert into DataBase(……) values(…...

    sqlite庫學習(5)sqlite插入

    創建數據庫和表 準備工作  (1)使用sqlite3_exec     (2)使用sqlite3_prepare_v2  ...

    SQLite學習筆記(四)

    概述 本篇文章將繼續介紹關于 SELECT 中的一些用法。文章結構如下: 子查詢 多表連接/聯結表 名稱和別名 組合/復合查詢 條件結果 一、子查詢 子查詢是指 SELECT 語句中又嵌套 SELECT 語句。子查詢最常應用的地方是 WHERE 子句,特別是在 IN 操作符中。下面通過一個例子來了解下子查詢的用法和好處。 例子 列出訂購商品 RGAN01 的所有顧客。這個需求的檢索思路如下: 檢索...

    猜你喜歡

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

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