Android應(yīng)用中內(nèi)嵌SQLite數(shù)據(jù)庫(kù)的基本操作指南
一、首先寫(xiě)一個(gè)類(lèi)繼承SQLiteOpenHelper類(lèi)
重寫(xiě)他的方法指定db的名稱(chēng)、版本,重寫(xiě)oncreat和onUpgrade方法,寫(xiě)SQL語(yǔ)句創(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); } /* *數(shù)據(jù)庫(kù)第一次被創(chuàng)建時(shí)調(diào)用的方法 *db是被創(chuàng)建的數(shù)據(jù)庫(kù) */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table person(id integer primary key autoincrement,name varchar(20),number varchar(20) )"); } /*當(dāng)數(shù)據(jù)庫(kù)版本更新時(shí)調(diào)用此方法*/ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
二、創(chuàng)建一個(gè)DAO類(lèi)對(duì)外提供增刪改查接口
其中執(zhí)行增刪改查的方法可以用SQL語(yǔ)句也可以使用系統(tǒng)給出的API,下面的代碼中把兩種方法都寫(xiě)了出來(lái)
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); } }
四、寫(xiě)一個(gè)JavaBean設(shè)置他的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();
六、關(guān)于數(shù)據(jù)庫(kù)的事務(wù)處理
android開(kāi)發(fā)中數(shù)據(jù)庫(kù)的操作非常慢,將所有操作打包成一個(gè)事務(wù)能夠大大的提高處理速度,其中最重要的是保證了數(shù)據(jù)的一致性,讓事務(wù)中的所有操作都能成功執(zhí)行,或者失敗,或者這所有操作都回滾。
SQLiteDatabase db = helper.getWritableDatabase(); db.beginTransaction(); try{ //在這里執(zhí)行多個(gè)數(shù)據(jù)庫(kù)操作,執(zhí)行過(guò)程中可能會(huì)拋出異常 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{ //所有操作完成結(jié)束一個(gè)事務(wù) db.endTransaction(); db.close; }
- Android SQLite數(shù)據(jù)庫(kù)增刪改查操作的使用詳解
- Android使用SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例
- android創(chuàng)建數(shù)據(jù)庫(kù)(SQLite)保存圖片示例
- Android中操作SQLite數(shù)據(jù)庫(kù)快速入門(mén)教程
- Android創(chuàng)建和使用數(shù)據(jù)庫(kù)SQLIte
- Android SQLite數(shù)據(jù)庫(kù)增刪改查操作的案例分析
- android通過(guò)jxl讀excel存入sqlite3數(shù)據(jù)庫(kù)
- Android操作SQLite數(shù)據(jù)庫(kù)(增、刪、改、查、分頁(yè)等)及ListView顯示數(shù)據(jù)的方法詳解
- Android 數(shù)據(jù)庫(kù)SQLite 寫(xiě)入SD卡的方法
- Android批量插入數(shù)據(jù)到SQLite數(shù)據(jù)庫(kù)的方法
- Android利用listview控件操作SQLite數(shù)據(jù)庫(kù)實(shí)例
- Android+SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)的生詞記事本功能實(shí)例
相關(guān)文章
Flutter pageview切換指示器的實(shí)現(xiàn)代碼
這篇文章主要介紹了Flutter pageview切換指示器的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Kotlin startActivity跳轉(zhuǎn)Activity實(shí)現(xiàn)流程詳解
在Android當(dāng)中,Activity的跳轉(zhuǎn)有兩種方法,第一個(gè)是利用startActivity(Intent intent);的方法,第二個(gè)則是利用startActivityForResult(Intent intent,int requestCode);的方法,從字面上來(lái)看,這兩者之間的差別只在于是否有返回值的區(qū)別,實(shí)際上也確實(shí)只有這兩種區(qū)別2022-12-12Android實(shí)現(xiàn)編程修改手機(jī)靜態(tài)IP的方法
這篇文章主要介紹了Android實(shí)現(xiàn)編程修改手機(jī)靜態(tài)IP的方法,涉及Android編程實(shí)現(xiàn)對(duì)系統(tǒng)底層信息修改的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10Android自定義View實(shí)現(xiàn)微信語(yǔ)音界面
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)微信語(yǔ)音界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11Android?手寫(xiě)熱修復(fù)dex實(shí)例詳解
這篇文章主要為大家介紹了Android?手寫(xiě)熱修復(fù)dex實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Android后臺(tái)定時(shí)提醒功能實(shí)現(xiàn)
這篇文章主要介紹了Android后臺(tái)定時(shí)提醒功能,針對(duì)Service,AlarmManager的使用進(jìn)行詳細(xì)闡述,感興趣的小伙伴們可以參考一下2016-01-01一款非常簡(jiǎn)單酷炫的LoadingView動(dòng)畫(huà)效果
這篇文章主要為大家詳細(xì)介紹了一款非常簡(jiǎn)單酷炫的LoadingView動(dòng)畫(huà)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android實(shí)現(xiàn)擴(kuò)展Menu的方法
這篇文章主要介紹了Android實(shí)現(xiàn)擴(kuò)展Menu的方法,涉及Android操作menu菜單的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10