一、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(); } }