一、SQLiteOpenHelper java
package com.pas.sqllitehelper; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { /** * 數據庫構造方法 用來定義數據庫的名稱 數據庫查詢的結果集 數據庫的版本 * @param context * @param name * @param factory * @param version */ public PersonSQLiteOpenHelper(Context context) { super(context, "person.db", null, 2); } /** * 數據庫首次建立的執行的方法 * @param db 被建立的數據庫 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table persons (id integer primary key autoincrement," + "name varchar(20),number varchar(20))"); } /** * 當數據庫版本號發生變化時候調用 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("數據庫更新", "數據庫更新……"); db.execSQL("alter table persons add account varchar(20)"); } }
二、Dao類 android
package com.pas.db.dao; import java.util.ArrayList; import java.util.List; import com.pas.domain.Person; import com.pas.sqllitehelper.PersonSQLiteOpenHelper; import android.R.bool; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class PersonDao { private PersonSQLiteOpenHelper helper; public PersonDao(Context context) { helper = new PersonSQLiteOpenHelper(context); } /** * 傳統方式-添加(不推薦) * * @param name * @param number */ public void add(String name, String number) { SQLiteDatabase db = helper.getWritableDatabase(); String sql = "insert into persons (name,number) values (?,?)"; Object[] para = new Object[] { name, number }; db.execSQL(sql, para); db.close(); } /** * 系統API添加 * * @param name * @param number */ public boolean add_api(String name, String number, long account) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("number", number); values.put("account", account); /* * 參數爲 表名 null填充列名 插入值的map集合 * 關於第二個參數: * 當values參數爲空或者裏面沒有內容的時候, * 咱們insert是會失敗的(底層數據庫不容許插入一個空行), * 爲了防止這種狀況,咱們要在這裏指定一個 列名, * 到時候若是發現將要插入的行爲空行時, * 就會將你指定的這個列名的值設爲null,而後再向數據庫中插入 */ long flag = db.insert("persons", null, values); db.close(); if (flag == -1) return false; return true; } /** * 查詢 * * @param name */ public List<Person> find(String name) { SQLiteDatabase db = helper.getReadableDatabase(); // String sql = "select * from persons where name=?"; // String[] para = new String[] // { name }; // Cursor res = db.rawQuery(sql, para); Cursor res = db.query("persons", null, "name=?", new String[] { name }, null, null, null); List<Person> persons = new ArrayList<Person>(); while (res.moveToNext()) { Person person = new Person(); person.setId(res.getString(0)); person.setName(res.getString(1)); person.setNumber(res.getString(2)); person.setAccount(res.getString(3)); persons.add(person); } res.close(); db.close(); return persons; } /** * 更新 * * @param name * @param number * @return */ public int update(String name, String number, String account) { SQLiteDatabase db = helper.getReadableDatabase(); ContentValues values = new ContentValues(); values.put("number", number); values.put("account", account); int rows = db.update("persons", values, "name=?", new String[] { name }); db.close(); return rows; } /** * 刪除 * * @param name * @return */ public int del(String name) { SQLiteDatabase db = helper.getReadableDatabase(); int rows = db.delete("persons", "name=?", new String[] { name }); db.close(); return rows; } /* * 轉帳 測試事務 */ public void transfer(String sourceName, String targetName, double value) { SQLiteDatabase db = helper.getWritableDatabase(); //開啓事務 db.beginTransaction(); try { db.execSQL("update persons set account=account-? where name=?", new Object[] { value, sourceName }); db.execSQL("update persons set account=account+? where name=?", new Object[] { value, targetName}); //標記數據庫事務執行成功 db.setTransactionSuccessful(); } finally { db.endTransaction(); } db.close(); } }