日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

安卓内部存储之数据库存储

發(fā)布時(shí)間:2023/12/20 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓内部存储之数据库存储 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

安卓內(nèi)部存儲(chǔ)數(shù)據(jù)有多種方式,其中就有利用SQLite數(shù)據(jù)庫存儲(chǔ)的,今日這篇文章就來說說如何實(shí)現(xiàn)數(shù)據(jù)庫存儲(chǔ)?
一般我們實(shí)現(xiàn)數(shù)據(jù)庫存儲(chǔ),主要做兩件事情,
第一件事情是創(chuàng)建一個(gè)數(shù)據(jù)庫,并且定義好我們想要的表結(jié)構(gòu),
第二件事情就是我們需要定義好實(shí)現(xiàn)對(duì)數(shù)據(jù)庫增刪改查的函數(shù),以供外部調(diào)用.

在實(shí)現(xiàn)代碼之前,我們需要先來說明一下SQLITE數(shù)據(jù)庫是什么東東?
一般寫代碼的人都知道數(shù)據(jù)庫,也知道數(shù)據(jù)庫管理系統(tǒng)有ORACLE ,SQL SERVER ,和MYSQL 等等.
那么sqlite這是個(gè)什么玩意就容易比較理解了.簡單來說,它也是一個(gè)數(shù)據(jù)庫,它支持大多數(shù)的標(biāo)準(zhǔn)sql語言,你可以把它看作是跟oracle sql server 等價(jià)的數(shù)據(jù)庫也可以,只不過sqlite是在安卓手機(jī)內(nèi)部存儲(chǔ)數(shù)據(jù)而已.
另外,有件事情我也不太確定,那就是sqlite是弱類型的數(shù)據(jù)庫,這個(gè)我是見過有一些材料這么說的,但是具體由于我沒有驗(yàn)證過,所以不太確定,有興趣的朋友不妨可以去驗(yàn)證驗(yàn)證.

下面是代碼實(shí)現(xiàn):
①首先是創(chuàng)建一個(gè)數(shù)據(jù)庫,并定義好我們需要的表結(jié)構(gòu).這里我定義的表就是一張課程表,里面只有兩個(gè)字段,分別是課程id 和 課程名字.
這里我們需要?jiǎng)?chuàng)建一個(gè)類并且繼承于sqliteopenhelper
`

package com.example.service;import android.content.Context; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;public class DataBaseHelper extends SQLiteOpenHelper {/*** 該方法用于創(chuàng)建數(shù)據(jù)庫, 其中name參數(shù)是數(shù)據(jù)庫的名字,這里設(shè)置為Course,* factory 是游標(biāo)工廠,用來創(chuàng)建游標(biāo),我們可以設(shè)為null,意思就是使用系統(tǒng)默認(rèn)的游標(biāo)工廠* ,最后一個(gè)參數(shù)version是指數(shù)據(jù)庫的版本號(hào),必須是大于0,不可以等于0,* 這里為了方便,我就將參數(shù)寫死,只保留一個(gè)context參數(shù)* * @param context* @param name* @param factory* @param version*/ public DataBaseHelper(Context context) {super(context, "Course.db", null, 1);// TODO 自動(dòng)生成的構(gòu)造函數(shù)存根//當(dāng)版本號(hào)碼變?yōu)?的時(shí)候,就會(huì)調(diào)用onUpgrade方法// super(context, "Course.db", null, 2); }/*** 該方法在數(shù)據(jù)庫第一次被創(chuàng)建時(shí)候被調(diào)用,用于定義好表結(jié)構(gòu),*/ @Override public void onCreate(SQLiteDatabase db) {// TODO 自動(dòng)生成的方法存根db.execSQL("create table courses (course_id Integer primary key autoincrement)"); }/*** 該方法是當(dāng)數(shù)據(jù)庫的版本號(hào)發(fā)生改變時(shí)被調(diào)用,比如我現(xiàn)在版本號(hào)碼是1,當(dāng)我版本號(hào)碼變?yōu)?的時(shí)候,就會(huì)調(diào)用該方法,該方法一般用于改變表結(jié)構(gòu)*/ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO 自動(dòng)生成的方法存根db.execSQL("alter table courses add course_name varchar(10)"); }}

`

②創(chuàng)建增刪改查等方法,以供調(diào)用
下面是另外創(chuàng)建一個(gè)類,名字為CourseService,并實(shí)現(xiàn)增刪改查等等方法.
為了方便,我們還需要?jiǎng)?chuàng)建一個(gè)JAVABEAN ,即是課程兩個(gè)屬性的類文件.

首先是JAVABEAN
`

package com.example.bean; import android.R.integer;public class Course {private Integer id; private String name; public Integer getId() {return id; } public void setId(Integer id) {this.id = id; } public String getName() {return name; } public void setName(String name) {this.name = name; }@Override public String toString() {return "Course [id=" + id + ", name=" + name + "]"; } public Course(Integer id,String name) {// TODO 自動(dòng)生成的構(gòu)造函數(shù)存根this.id=id;this.name=name; }public Course() {// TODO 自動(dòng)生成的構(gòu)造函數(shù)存根 }}

`

然后是增刪改查等等方法代碼:
`

package com.example.service;import java.util.ArrayList; import java.util.List; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.example.bean.Course;public class CourseService {private DataBaseHelper helper;public CourseService(Context context) {// TODO 自動(dòng)生成的構(gòu)造函數(shù)存根helper=new DataBaseHelper(context); }/*** 插入數(shù)據(jù)* @param course_name* @throws Exception*/ public void insert(String course_name) throws Exception{SQLiteDatabase db=helper.getWritableDatabase();db.execSQL("insert into courses(course_name) values(?)",new Object[]{course_name});db.close(); }/*** 刪除數(shù)據(jù)* @param id* @throws Exception*/ public void delete(Integer id) throws Exception{SQLiteDatabase db=helper.getWritableDatabase();db.execSQL("delete from courses where course_id=?",new Object[]{id});db.close(); }/*** 更新數(shù)據(jù)* @param c* @throws Exception*/ public void update(Course c) throws Exception{SQLiteDatabase db=helper.getWritableDatabase();db.execSQL("update courses set course_name=? where course_id=?",new Object[]{c.getName(),c.getId()});db.close(); }/*** 查詢數(shù)據(jù)* @param id* @return* @throws Exception*/ public List<Course> query(Integer id) throws Exception{List<Course> courses=new ArrayList<Course>();SQLiteDatabase db=helper.getReadableDatabase();Cursor cursor= db.rawQuery("select * from courses", null);while(cursor.moveToNext()){Course cou=new Course();cou.setId(cursor.getInt(cursor.getColumnIndex("course_id")));cou.setName(cursor.getString(cursor.getColumnIndex("course_name")));courses.add(cou);}cursor.close();return courses;}/*** 分頁查詢數(shù)據(jù)* @param maxCount* @param offset* @return* @throws Exception*/ public List<Course> queryDivide(int maxCount,int offset) throws Exception{List<Course> courses=new ArrayList<Course>();SQLiteDatabase db=helper.getReadableDatabase();Cursor cursor= db.rawQuery("select * from courses limit ? offset ?",new String[]{String.valueOf(maxCount),String.valueOf(offset)});while(cursor.moveToNext()){Course cou=new Course();cou.setId(cursor.getInt(cursor.getColumnIndex("course_id")));cou.setName(cursor.getString(cursor.getColumnIndex("course_name")));courses.add(cou);}cursor.close();return courses;} }

`

實(shí)際上到這里,sqlite數(shù)據(jù)庫的如何使用,已經(jīng)論述完了,但是數(shù)據(jù)庫避免不了一件事情,就是事務(wù)的原子性.
要么都做,要么都不做,這是數(shù)據(jù)庫的很重要的一件事情.
下面講述最后一個(gè)知識(shí)點(diǎn),sqlite如何開啟一個(gè)事務(wù).
代碼如下:
`

/*** 該方法只是一個(gè)demo而已,開啟一個(gè)事務(wù),一次性添加兩門課程,分別是1111和2222,* 雖然這件事情毫無意義,但是開啟事務(wù)代碼就這么簡單,大家只需要將相關(guān)的代碼改改就好了* @throws Exception*/ public void insert2 () throws Exception{SQLiteDatabase db=helper.getWritableDatabase();db.beginTransaction();//開啟一個(gè)事務(wù)try{db.execSQL("insert into courses(course_name) values(?)",new Object[]{"1111"});db.execSQL("insert into courses(course_name) values(?)",new Object[]{"2222"});db.setTransactionSuccessful();//設(shè)置事務(wù)結(jié)束標(biāo)志為true,因?yàn)槭聞?wù)結(jié)束有兩種情況,分別是commit 和rollback,若不將標(biāo)識(shí)設(shè)為successful,那么事務(wù)結(jié)束時(shí)候不會(huì)提交,而是回滾}finally{db.endTransaction();//結(jié)束一個(gè)事務(wù)db.close();}}

`
好的,本文章要說的內(nèi)容已經(jīng)說完了.
最后一個(gè)友情提示:
大家知道自己創(chuàng)建的數(shù)據(jù)庫文件存放在哪里么?
打開模擬器,在路徑data/data/你創(chuàng)建數(shù)據(jù)庫文件的項(xiàng)目包/database/的下面就有你自己創(chuàng)建的數(shù)據(jù)庫文件了.
你可以將其導(dǎo)出來,利用SQLiteExpert來進(jìn)行查看.

總結(jié)

以上是生活随笔為你收集整理的安卓内部存储之数据库存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。