安卓內部存儲數據有多種方式,其中就有利用SQLite數據庫存儲的,今日這篇文章就來說說如何實現數據庫存儲?
一般我們實現數據庫存儲,主要做兩件事情,
第一件事情是創建一個數據庫,并且定義好我們想要的表結構,
第二件事情就是我們需要定義好實現對數據庫增刪改查的函數,以供外部調用.
在實現代碼之前,我們需要先來說明一下SQLITE數據庫是什么東東?
一般寫代碼的人都知道數據庫,也知道數據庫管理系統有ORACLE ,SQL SERVER ,和MYSQL 等等.
那么sqlite這是個什么玩意就容易比較理解了.簡單來說,它也是一個數據庫,它支持大多數的標準sql語言,你可以把它看作是跟oracle sql server 等價的數據庫也可以,只不過sqlite是在安卓手機內部存儲數據而已.
另外,有件事情我也不太確定,那就是sqlite是弱類型的數據庫,這個我是見過有一些材料這么說的,但是具體由于我沒有驗證過,所以不太確定,有興趣的朋友不妨可以去驗證驗證.
下面是代碼實現:
①首先是創建一個數據庫,并定義好我們需要的表結構.這里我定義的表就是一張課程表,里面只有兩個字段,分別是課程id 和 課程名字.
這里我們需要創建一個類并且繼承于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)");
}}
`
②創建增刪改查等方法,以供調用
下面是另外創建一個類,名字為CourseService,并實現增刪改查等等方法.
為了方便,我們還需要創建一個JAVABEAN ,即是課程兩個屬性的類文件.
首先是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;}
}
`
實際上到這里,sqlite數據庫的如何使用,已經論述完了,但是數據庫避免不了一件事情,就是事務的原子性.
要么都做,要么都不做,這是數據庫的很重要的一件事情.
下面講述最后一個知識點,sqlite如何開啟一個事務.
代碼如下:
`
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();}}
`
好的,本文章要說的內容已經說完了.
最后一個友情提示:
大家知道自己創建的數據庫文件存放在哪里么?
打開模擬器,在路徑data/data/你創建數據庫文件的項目包/database/的下面就有你自己創建的數據庫文件了.
你可以將其導出來,利用SQLiteExpert來進行查看.
總結
以上是生活随笔為你收集整理的安卓内部存储之数据库存储的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。