安卓內(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 {
public DataBaseHelper(Context context) {
super(context,
"Course.db",
null,
1);
}
@Override
public void onCreate(SQLiteDatabase db) {db.execSQL(
"create table courses (course_id Integer primary key autoincrement)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {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) {
this.id=id;
this.name=name;
}
public Course() {
}}
`
然后是增刪改查等等方法代碼:
`
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) {helper=
new DataBaseHelper(context);
}
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();
}
public void delete(Integer id)
throws Exception{SQLiteDatabase db=helper.getWritableDatabase();db.execSQL(
"delete from courses where course_id=?",
new Object[]{id});db.close();
}
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();
}
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;}
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ù).
代碼如下:
`
public void insert2 ()
throws Exception{SQLiteDatabase db=helper.getWritableDatabase();db.beginTransaction();
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();}
finally{db.endTransaction();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ò),歡迎將生活随笔推薦給好友。