最近自己在寫一個小的app,用到了SQLite數據庫,就簡單探討一下SQLite數據庫在android 開發中的用法。數據庫存儲數據有很明顯的優勢,數據條理清晰,易於提取和存儲,安全性也有一定的保證。
SQLite 的使用方法:
首先我們需要一個Helper,它繼承於SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "inote.db"; //數據庫的名字
private static final int DATABASE_VERSION = 2; //數據庫的版本號
private static final String CREATE_TABLE_SQL = //創建的表
"create table if not exists note"+
"(nCTime varchar not null," +
"nId integer," +
"nSTime varchar not null," +
"nTitle varchar not null," +
"nContent varchar," +
"nEngency varchar," +
"nPointX integer not null," +
"nPointY integer not null,"+
"nAId Integer not null default 0, primary key(nCTime,nId))";
private static final String VERSION_TWO = "alter table note add nAId Integer default 0";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); //指明瞭第一次創建時的數據庫名字,版本號
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_SQL); //這裏創建表
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //當數據庫版本號變化時執行
db.execSQL(VERSION_TWO);
}
}
package csu.scrovor.cn.inote.Util.SQLite;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import csu.scrovor.cn.inote.Beans.Engency;
import csu.scrovor.cn.inote.Beans.NoteInfo;
import csu.scrovor.cn.inote.Util.Utils;
/**
* Created by lenovo on 2016/10/28.
*/
public class DBManager {
private SQLiteDatabase db;
private DBHelper helper;
private String insertSql = "insert into note values(?,?,?,?,?,?,?,?,?)";
private String updateSql = "update note set nSTime=?,nTitle=?,nContent=?,nEngency=? where nCTime=? and nId=?";
private String deleteSql = "delete from note where nCTime=? and nId=?";
public DBManager(Context context){
helper = new DBHelper(context);
db = helper.getWritableDatabase(); //通過此方法來獲取可寫的數據庫實例
}
public void insert(NoteInfo noteInfo){
db.beginTransaction(); //開始事務
try{
db.execSQL(insertSql,new Object[]{
noteInfo.getCdate(),
noteInfo.getnId(),
noteInfo.getDate().toString(),
noteInfo.getKeyWord(),
noteInfo.getContent(),
noteInfo.getEngency().toString(),
noteInfo.getPointX(),
noteInfo.getPointY(),
noteInfo.getaId()
});
db.setTransactionSuccessful();
}catch(Exception e){
e.printStackTrace();
}finally {
db.endTransaction(); //結束事務
}
}
public void close(){
db.close();
}
}
這裏說明下,所有對數據庫中的數據進行修改的都要包在beginTransaction()和endTransaction()之中,這是爲了防止併發導致的數據異常。