SQL學習筆記之資料庫專題(二):Android下SQL資料庫開發,學習筆記android

來源:互聯網
上載者:User

SQL學習筆記之資料庫專題(二):Android下SQL資料庫開發,學習筆記android

在Android開發 中,資料庫是不可缺少的。在Android開發中,用的是一種小型的嵌入式資料庫,sqllite。今天會寫兩篇關於Android開發環境下資料庫開發的文章,第一篇先介紹使用android內建的API來實現資料庫的使用和管理以及增刪改查、資料庫升級的相關操作。


一、資料庫第一次產生1、javabean檔案的準備這裡以一個Person類為例子來描述
package com.example.freedomsql.bean;import java.io.Serializable;/** * @ClassName: Person * @author victor_freedom (x_freedom_reddevil@126.com) * @createddate 2015-1-10 下午4:22:09 * @Description: TODO */public class Person implements Serializable {private int id;private String name;private String number;// private String nickname;public Person(int id, String name, String number) {super();this.id = id;this.name = name;this.number = number;// this.nickname = nickname;}}
2、資料庫類的編寫要實現一個資料庫的使用,需要建立一個類並繼承SQLiteOpenHelper類。然後實現一個構造方法,詳情看代碼
package com.example.freedomsql.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * @ClassName: FreedomDB * @author victor_freedom (x_freedom_reddevil@126.com) * @createddate 2015-1-10 下午2:49:15 * @Description: TODO */public class FreedomDB extends SQLiteOpenHelper {public FreedomDB(Context context) {// 參數依次為:上下文,資料庫名稱,遊標工廠一般為NULL,資料庫版本號碼,升級的時候需要更改super(context, "freedom.db", null, 1);}/** * 第一次建立資料庫的時候觸發該方法 */@Overridepublic void onCreate(SQLiteDatabase db) {//sql語句詳情請參考該系列文章第一篇db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");}/** * 資料庫版本號碼變化的時候觸發該方法 */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {// if (oldversion == 1 && newversion == 2) {// db.execSQL("alter table person add nickname varchar(20)");// }}}

3、資料庫操作類dao類編寫資料庫建立完成之後,需要有一個操作類來實現對資料庫的操作,一般命名為dao類。詳情請參考代碼:
package com.example.freedomsql.db.dao;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.freedomsql.bean.Person;import com.example.freedomsql.db.FreedomDB;/** * @ClassName: PersonDao * @author victor_freedom (x_freedom_reddevil@126.com) * @createddate 2015-1-10 下午2:30:24 * @Description: TODO */public class PersonDao {private FreedomDB dbHelper;public PersonDao(Context context) {dbHelper = new FreedomDB(context);}/** * @Title: add * @Description:增加 * @param name * @param number * @throws */public void add(String name, String number) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("insert into person(name,number) values (?,?)",new Object[] { name, number });db.close();// 系統API// ContentValues = values = new ContentValues();// values.put("name",name);// values.put("number",number);// long id = db.insert(table(表名),null,values(資料));// return id;}///**// * @Title: add// * @Description: 升級後的增加方法// * @param name// * @param number// * @param nickname// * @throws// *///public void add(String name, String number, String nickname) {//SQLiteDatabase db = dbHelper.getWritableDatabase();//db.execSQL("insert into person(name,number,nickname) values (?,?,?)",//new Object[] { name, number, nickname });//db.close();//// 系統API//// ContentValues = values = new ContentValues();//// values.put("name",name);//// values.put("number",number);//// long id = db.insert(table(表名),null,values(資料));//// return id;////}/** * @Title: delete * @Description: 刪除 * @param name * @throws */public void delete(String name) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("delete from person where name=?", new Object[] { name });// 系統API// int number=db.delete("person","name=?",new String[]{name});db.close();}/** * @Title: updata * @Description: 更新 * @param name * @param newnumber * @throws */public void updata(String name, String newnumber) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("update person set number=? where name=?", new Object[] {newnumber, name });// 系統API// ContentValues values = new ContentValues();// values.put("number", newnumber);// int num = db.update("person", values, "name=?", new String[] { name// });db.close();}/** * @Title: find * @Description: 查詢 * @param name * @return * @throws */public boolean find(String name) {SQLiteDatabase db = dbHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person where name =?",new String[] { name });// 系統API// Cursor cursor = db.query(table(表名),null,"name=?",new// String[](name),null,null,null);boolean result = cursor.moveToNext();cursor.close();db.close();return result;}/** * @Title: findAll * @Description:查詢 * @return * @throws */public List<Person> findAll() {List<Person> persons = new ArrayList<Person>();SQLiteDatabase db = dbHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person", null);// 系統API// Cursor cursor= db.query("Person",new// String[]{"name","id","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"));// String nickname = cursor.getString(cursor// .getColumnIndex("nickname"));Person p = new Person(id, name, number);persons.add(p);}cursor.close();db.close();return persons;}}
4、主Activity內代碼在activity內我們使用dao類對資料庫進行操作。
package com.example.freedomsql;import com.example.freedomsql.db.dao.PersonDao;import android.app.Activity;import android.app.ActionBar;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.os.Build;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);PersonDao dao = new PersonDao(getBaseContext());dao.add("湯老闆", "110");dao.add("郭大俠", "119");// dao.add("湯老闆1", "110", "湯老闆");// dao.add("郭大俠1", "119", "郭女俠");}}
這裡只對插入資料進行了操作,有興趣的同學可以自己測試其他的操作也可以在dao類寫其他的方法進行更複雜的操作。代碼執行後資料庫內容顯示
二、資料庫升級更新在實際開發中,資料庫肯定會有升級相關的操作,但是,資料庫的升級自然不可以讓項目之前的資料清掉,必須保留,所以,這需要對資料庫版本號碼進行一定的控制和處理。那麼我們來對剛剛的資料庫進行升級處理1、person類的升級,增加一個nickname欄位
package com.example.freedomsql.bean;import java.io.Serializable;/** * @ClassName: Person * @author victor_freedom (x_freedom_reddevil@126.com) * @createddate 2015-1-10 下午4:22:09 * @Description: TODO */public class Person implements Serializable {private int id;private String name;private String number;private String nickname;public Person(int id, String name, String number, String nickname) {super();this.id = id;this.name = name;this.number = number;this.nickname = nickname;}}

2、資料庫產生類的改動1、將版本號碼更改為2
public FreedomDB(Context context) {// 參數依次為:上下文,資料庫名稱,遊標工廠一般為NULL,資料庫版本號碼,升級的時候需要更改super(context, "freedom.db", null, 2);}


2、在onUpgrade方法中進行處理,在實際開發中,特別需要對版本號碼進行邏輯處理。
/** * 資料庫版本號碼變化的時候觸發該方法 */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {if (oldversion == 1 && newversion == 2) {db.execSQL("alter table person add nickname varchar(20)");}}

3、Dao類的修改1、增加方法的改動
/** * @Title: add * @Description: 升級後的增加方法 * @param name * @param number * @param nickname * @throws */public void add(String name, String number, String nickname) {SQLiteDatabase db = dbHelper.getWritableDatabase();db.execSQL("insert into person(name,number,nickname) values (?,?,?)",new Object[] { name, number, nickname });db.close();// 系統API// ContentValues = values = new ContentValues();// values.put("name",name);// values.put("number",number);// long id = db.insert(table(表名),null,values(資料));// return id;}

2、查詢方法的改動
/** * @Title: findAll * @Description:查詢 * @return * @throws */public List<Person> findAll() {List<Person> persons = new ArrayList<Person>();SQLiteDatabase db = dbHelper.getReadableDatabase();Cursor cursor = db.rawQuery("select * from person", null);// 系統API// Cursor cursor= db.query("Person",new// String[]{"name","id","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"));String nickname = cursor.getString(cursor.getColumnIndex("nickname"));Person p = new Person(id, name, number,nickname);persons.add(p);}cursor.close();db.close();return persons;}
4、主Activity的修改
package com.example.freedomsql;import com.example.freedomsql.db.dao.PersonDao;import android.app.Activity;import android.app.ActionBar;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.os.Build;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);PersonDao dao = new PersonDao(getBaseContext());dao.add("湯老闆1", "110", "湯老闆");dao.add("郭大俠1", "119", "郭女俠");}}

這樣就完成了對資料庫升級之後的操作,我們來看下升級後的資料庫內容從圖我們可以看到,之前有的資料還存在,沒有清除掉,新增加的欄位增加進去了,新建立的對象也建立成功。
在Android開發中sqlite資料庫的基礎操作介紹完畢,當然,在實際開發中,我們不會這樣去操作,有很多封裝好了的架構給我們去使用,而且效能極大的最佳化,操作簡便。學習這些基礎開發,是為了讓我們更加清晰的知道資料庫底層的操作原理。所有的資料庫操作架構基本上都是基於這套理論去實現的。瞭解這些後我們再去學習架構的使用,會容易上手。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.