Android——SQLite实现面向对象CRUD
? ? ? ?android中SQLite的使用,事實上倒也不難。可是與JDBC操作數據庫相比,這個還是有點不順手,并且我好久沒寫底層的封裝了,使用SSM框架這些都不須要考慮......好了,廢話不多說。以下直接建立一個測試project來試試SQLite在Android中的應用吧。
1、新建一個project
2、配置junit測試環境
打開AndroidManifest.xml文件,進行jUnit相關配置,詳細例如以下圖:
3、源代碼
? ? ? ? 關于在Android中怎樣使用SQLite的文章非常多,我也是參考那些文章進行學習的。
作為一個J2EE方向的開發人員,我習慣于面向對象進行編程,而老羅的視頻以及一些其它的教程關于CRUD操作使用的都是字符串,這我有點不適應,全部我在學習的過程中就改成了面向對象的CRUD操作。這樣用著也方便點。原理、API什么的我就不說了。百度一下嗖嗖的都出來了,以下直接貼代碼(完整project下載。點這里):
? ? ? 這樣一個繼承SQLiteOpenHelper的類主要就這么幾個功能:
? ? ? ? ? ?a.創建數據庫和表
? ? ? ? ? ?b.假設數據庫有不同版本號那么就會更新數據庫
? ? ? ? ? ?c.調用的這個類的對象來取得數據庫的讀寫權限
package com.example.db;import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "test.db";private static final int DATABASE_VERSION = 1;public DBHelper(Context context) {// CursorFactory設置為null,使用默認值super(context, DATABASE_NAME, null, DATABASE_VERSION);}// 數據庫第一次被創建時onCreate會被調用@Overridepublic void onCreate(SQLiteDatabase db) {String sql = "CREATE TABLE IF NOT EXISTS person "+ "(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(32),sex VARCHAR(8))";db.execSQL(sql);}// 假設DATABASE_VERSION值被改為2,系統發現現有數據庫版本號不同,即會調用onUpgrade@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("ALTER TABLE base_info ADD COLUMN other STRING");} }
能夠看到上面創建了一個叫test.db的數據庫。當中有一個表person,表中有三個字段:主鍵-id。姓名-name,性別-sex。
以下生成這個表相應的實體類:
package com.example.pojo;public class Person {private int id;private String name;private String sex;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 getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", sex=" + sex + "]";}}
我們要實現CRUD操作,那么建一個接口定義CRUD方法:
package com.example.dao;import com.example.pojo.Person;public interface IPersonDao {public boolean insert(Person person);public boolean delete(int id);public boolean update(Person person);public Person select(int id); }
以下要實現IPersonDao接口。定義詳細的業務方法:
package com.example.dao.impl;import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase;import com.example.dao.IPersonDao; import com.example.db.DBHelper; import com.example.pojo.Person;public class PersonDaoImpl implements IPersonDao {DBHelper helper = null;public PersonDaoImpl(Context context){helper = new DBHelper(context);}@Overridepublic boolean insert(Person person) {boolean flag = false;SQLiteDatabase database = null;try {String sql = "INSERT INTO person(name,sex) VALUES (?,?)";database = helper.getWritableDatabase();database.execSQL(sql, new Object[]{person.getName(),person.getSex()});flag = true;} catch (Exception e) {e.printStackTrace();}finally{if(database!=null){database.close();}}return flag;}@Overridepublic boolean delete(int id) {boolean flag = false;SQLiteDatabase database = null;try {String sql = "DELETE FROM person WHERE id=?";database = helper.getWritableDatabase();database.execSQL(sql, new Object[]{Integer.toString(id)});flag = true;} catch (Exception e) {e.printStackTrace();}finally{if(database!=null){database.close();}}return flag;}@Overridepublic boolean update(Person person) {boolean flag = false;SQLiteDatabase database = null;try {String sql = "UPDATE person set name=? , sex=? where id=?";database = helper.getWritableDatabase();database.execSQL(sql, new Object[]{person.getName(),person.getSex(),person.getId()});flag = true;} catch (Exception e) {e.printStackTrace();}finally{if(database!=null){database.close();}}return flag;}@Overridepublic Person select(int id) {Person person = new Person();SQLiteDatabase database = null;try {String sql = "SELECT * FROM person where id=?";database = helper.getReadableDatabase(); Cursor cursor = database.rawQuery(sql, new String[]{Integer.toString(id)});while(cursor.moveToNext()){int _id = cursor.getInt(cursor.getColumnIndex("id"));String _name = cursor.getString(cursor.getColumnIndex("name"));String _sex = cursor.getString(cursor.getColumnIndex("sex"));person.setId(_id);person.setName(_name);person.setSex(_sex);}} catch (Exception e) {e.printStackTrace();}finally{if(database!=null){database.close();}}return person;}}
以上完畢之后就能夠開始單元測試了。綠色......
package com.example.test;import com.example.dao.IPersonDao; import com.example.dao.impl.PersonDaoImpl; import com.example.pojo.Person;import android.test.AndroidTestCase; import android.util.Log;public class Test extends AndroidTestCase {public void insertDB(){IPersonDao personDao = new PersonDaoImpl(getContext());Person person = new Person();person.setName("李四");person.setSex("男");personDao.insert(person);}public void selectDB(){IPersonDao personDao = new PersonDaoImpl(getContext());Person person = personDao.select(1);Log.i("info", person.toString());}public void updateDB(){IPersonDao personDao = new PersonDaoImpl(getContext());Person person = personDao.select(1);person.setName("改名字啦");person.setSex("不詳");personDao.update(person);}public void deleteDB(){IPersonDao personDao = new PersonDaoImpl(getContext());personDao.delete(2);}}
導出test.db文件。在SQLite Expert中打開:
這是insert測試成功的樣例。其它就不放圖了,這個軟件百度就能夠下載了。
(轉載注明出處:http://blog.csdn.net/zhshulin)
總結
以上是生活随笔為你收集整理的Android——SQLite实现面向对象CRUD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java删除文件和目录
- 下一篇: Git之 手把手教你使用Git