Android應用中內嵌SQLite數據庫的基本操作指南
一、首先寫一個類繼承SQLiteOpenHelper類
重寫他的方法指定db的名稱、版本,重寫oncreat和onUpgrade方法,寫SQL語句創(chuàng)建表
public class MySQLiteOpenhelper extends SQLiteOpenHelper {
private static String name = "person.db";
private static int version = 1;
public MySQLiteOpenhelper(Context context){
super(context,name,null,version);
}
/*
*數據庫第一次被創(chuàng)建時調用的方法
*db是被創(chuàng)建的數據庫
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person(id integer primary key autoincrement,name varchar(20),number varchar(20) )");
}
/*當數據庫版本更新時調用此方法*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
二、創(chuàng)建一個DAO類對外提供增刪改查接口
其中執(zhí)行增刪改查的方法可以用SQL語句也可以使用系統(tǒng)給出的API,下面的代碼中把兩種方法都寫了出來
public class Persondao {
private MySQLiteOpenhelper helper;
public Persondao(){
}
public Persondao(Context context){
helper = new MySQLiteOpenhelper(context);
}
public void add(String name,String number){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into person (name,number)values(?,?)",new Object[]{name,number});
/*ContentValues values = new ContentValues();
values.put("number",number);
values.put("name", name);
long id = db.insert("Person",null, values);*/
db.close();
}
public boolean find(String name){
SQLiteDatabase db = helper.getWritableDatabase();
//Cursor cursor = db.rawQuery("select *from person where name=?", new String[]{name});
Cursor cursor = db.query("person", null,"name=?",new String[]{name},null,null, null);
boolean result =cursor.moveToNext();
cursor.close();
db.close();
return result;
}
public int update(String name,String newnumber){
SQLiteDatabase db = helper.getWritableDatabase();
//db.execSQL("update person set number=? where name=?",new Object[]{newnumber,name});
ContentValues values = new ContentValues();
values.put("number",newnumber);
int number = db.update("person", values,"name=?",new String[]{newnumber});
db.close();
return number;
}
public int delet(String name){
SQLiteDatabase db = helper.getWritableDatabase();
//db.execSQL("delete from person where name=?",new String[]{name});
int number = db.delete("person","name=?",new String[]{name});
db.close();
return number;
}
public List<Person> findAll(){
List<Person> persons = new ArrayList<Person>();
SQLiteDatabase db = helper.getWritableDatabase();
//Cursor cursor = db.rawQuery("select *from person", null);
Cursor cursor = db.query("person",new String[]{"id","name","number"}, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String number = cursor.getString(cursor.getColumnIndex("number"));
Person p = new Person();
persons.add(p);
}
db.close();
cursor.close();
return persons;
}
}
三、增刪改查操作
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class ToDoDB extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "todo_db";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = "todo_table";
public final static String FIELD_id = "_id";
public final static String FIELD_TEXT = "todo_text";
public ToDoDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
/* 建立table */
String sql = "CREATE TABLE " + TABLE_NAME + " (" + FIELD_id
+ " INTEGER primary key autoincrement, " + " " + FIELD_TEXT
+ " text)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}
public Cursor select() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db
.query(TABLE_NAME, null, null, null, null, null, null);
return cursor;
}
public long insert(String text) {
SQLiteDatabase db = this.getWritableDatabase();
/* 將新增的值放入ContentValues */
ContentValues cv = new ContentValues();
cv.put(FIELD_TEXT, text);
long row = db.insert(TABLE_NAME, null, cv);
return row;
}
public void delete(int id) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_id + " = ?";
String[] whereValue = { Integer.toString(id) };
db.delete(TABLE_NAME, where, whereValue);
}
public void update(int id, String text) {
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_id + " = ?";
String[] whereValue = { Integer.toString(id) };
/* 將修改的值放入ContentValues */
ContentValues cv = new ContentValues();
cv.put(FIELD_TEXT, text);
db.update(TABLE_NAME, cv, where, whereValue);
}
}
四、寫一個JavaBean設置他的get、set方法
public class Person {
private int id;
private String name;
private String number;
public Person(){
}
public Person(int id, String name, String number) {
this.id = id;
this.name = name;
this.number = number;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
五、mainactivity中使用它
private SQLiteOpenHelper helper; Persondao dao = new Persondao(); helper = new MySQLiteOpenhelper(this); helper.getWritableDatabase(); SQLiteDatabase db = helper.getWritableDatabase();
六、關于數據庫的事務處理
android開發(fā)中數據庫的操作非常慢,將所有操作打包成一個事務能夠大大的提高處理速度,其中最重要的是保證了數據的一致性,讓事務中的所有操作都能成功執(zhí)行,或者失敗,或者這所有操作都回滾。
SQLiteDatabase db = helper.getWritableDatabase();
db.beginTransaction();
try{
//在這里執(zhí)行多個數據庫操作,執(zhí)行過程中可能會拋出異常
db.execSQL("update person set number=? where name=?",new Object[]{"1",jacky});
db.execSQL("update person set number=? where name=?",new Object[]{"2","sunny"});
db.setTransactionSuccessful();
}catch{
//捕獲異常
throw e;
}finally{
//所有操作完成結束一個事務
db.endTransaction();
db.close;
}
- Android SQLite數據庫增刪改查操作的使用詳解
- Android使用SQLite數據庫的簡單實例
- android創(chuàng)建數據庫(SQLite)保存圖片示例
- Android中操作SQLite數據庫快速入門教程
- Android創(chuàng)建和使用數據庫SQLIte
- Android SQLite數據庫增刪改查操作的案例分析
- android通過jxl讀excel存入sqlite3數據庫
- Android操作SQLite數據庫(增、刪、改、查、分頁等)及ListView顯示數據的方法詳解
- Android 數據庫SQLite 寫入SD卡的方法
- Android批量插入數據到SQLite數據庫的方法
- Android利用listview控件操作SQLite數據庫實例
- Android+SQLite數據庫實現的生詞記事本功能實例
相關文章
eclipse中運行monkeyrunner腳本之環(huán)境搭建(4)
這篇文章主要為大家詳細介紹了eclipse中運行monkeyrunner腳本之環(huán)境搭建的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
android開發(fā)教程之實現滑動關閉fragment示例
這篇文章主要介紹了android實現滑動關閉fragment示例,需要的朋友可以參考下2014-03-03
Android通過HTTP協(xié)議實現斷點續(xù)傳下載實例
本篇文章主要介紹了Android通過HTTP協(xié)議實現斷點續(xù)傳下載實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04
解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is inco
這篇文章主要介紹了解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is incompatible (supported only in IntelliJ IDEA)的問題 ,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-12-12
Android變形(Transform)之Camera使用介紹
Camera主要實現3D的變形,有轉動,旋轉等,Camera的源碼是由Native(本地代碼)實現,提供的接口也比較簡單,感興趣的朋友可以參考下,或許對你學習有所幫助2013-02-02
Android實現EditText內容保存為Bitmap的方法
這篇文章主要介紹了Android實現EditText內容保存為Bitmap的方法,涉及Android中saveBitmap方法的簡單使用技巧,需要的朋友可以參考下2016-01-01

