1. 加载驱动.
2. 连接数据库.
3. 操作数据库.
SQLite:一款轻量级的数据库,除了主键(Primark key)需要设置为Integer类型且填充数据必须是integer类型,其它字段均任意类型填充
字段属性与语法sqlserver类似,但无关键字
在android系统中提供了SQLiteOpenHelper抽象类,用于版本管理与操作:
onCreate:数据库创建时执行
onUpgrade:数据库更新版本时执行
onOpen:数据库打开连接时执行
实现SQLiteOpenHelper抽象类
1 /* 2 * 数据库帮助类 3 * */ 4 public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { 5 6 7 public PersonSQLiteOpenHelper(Context context) { 8 //super(context, name, factory, version); 9 /* 10 * context 上下文 11 * name 数据库名 12 * factory游标工厂 13 * version 版本,必须大于1*/ 14 super(context, "cuiOne.db", null, 1); 15 // TODO Auto-generated constructor stub 16 } 17 18 //数据库第一次创建时回调此方法 19 //初始化一些表 20 @Override 21 public void onCreate(SQLiteDatabase db) { 22 // TODO Auto-generated method stub 23 String sql="create table Person(_id integer primary key,age integer,name varchar(20));"; 24 db.execSQL(sql); 25 26 } 27 28 //数据库的版本号更新时回调此 方法, 29 //更新数据库内容 30 @Override 31 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 32 // TODO Auto-generated method stub 33 34 } 35 36 }
使用sql语句实现数据的insert、query
1 public class Persondao { 2 PersonSQLiteOpenHelper mOpenHelper;//成员变量 3 4 public Persondao(Context context){ 5 mOpenHelper=new PersonSQLiteOpenHelper(context); 6 } 7 8 public void insert(Person p){ 9 //赋给db写入权限 10 SQLiteDatabase db= mOpenHelper.getWritableDatabase(); 11 //判断数据库状态是否为打开状态 12 if(db.isOpen()){ 13 db.execSQL("insert into person(name,age) values(?,?);", new Object[]{p.getName(),p.getAge()}); 14 db.close(); 15 } 16 } 17 18 public ListqueryAll(){ 19 SQLiteDatabase db=mOpenHelper.getReadableDatabase(); 20 if(db.isOpen()){ 21 Cursor rawCur = db.rawQuery("select _id,age,name from Person", null); 22 if(rawCur!=null&&rawCur.getCount()>0){ 23 List list=new ArrayList (); 24 int id;int age;String name; 25 while(rawCur.moveToNext()){ 26 id=rawCur.getInt(0); 27 age=rawCur.getInt(1); 28 name=rawCur.getString(1); 29 list.add(new Person(id,age,name)); 30 } 31 db.close(); 32 return list; 33 } 34 db.close(); 35 } 36 return null; 37 } 38 39 public Person queryItem(int id){ 40 SQLiteDatabase db=mOpenHelper.getReadableDatabase(); 41 if(db.isOpen()){ 42 Cursor cur=db.rawQuery("select _id,age,name from Person where _id=?;", new String[]{String.valueOf(id)}); 43 //判断游标在移动到下一个位置时是否有值 44 if(cur!=null&&cur.moveToFirst()){ 45 int _id=cur.getInt(0); 46 int age=cur.getInt(1); 47 String name=cur.getString(2); 48 db.close(); 49 return new Person(_id,age,name); 50 } 51 db.close(); 52 } 53 return null; 54 55 } 56 }
使用SQLite工具类实现i,d,u,q
public class PersonDao2 {private static final String TAG = "PersonDao2";private PersonSQLiteOpenHelper mOpenHelper; // 数据库的帮助类对象public PersonDao2(Context context) {mOpenHelper = new PersonSQLiteOpenHelper(context);}/*** 添加到person表一条数据* @param person*/public void insert(Person person) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 ContentValues values = new ContentValues();values.put("name", person.getName()); // key作为要存储的列名, value对象列的值values.put("age", person.getAge());long id = db.insert("person", "name", values);Log.i(TAG, "id: " + id);db.close(); // 数据库关闭 }}/*** 更据id删除记录* @param id*/public void delete(int id) {SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 获得可写的数据库对象if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 String whereClause = "_id = ?";String[] whereArgs = {id + ""};int count = db.delete("person", whereClause, whereArgs);Log.i(TAG, "删除了: " + count + "行");db.close(); // 数据库关闭 }}/*** 根据id找到记录, 并且修改姓名* @param id* @param name*/public void update(int id, String name) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) { // 如果数据库打开, 执行添加的操作ContentValues values = new ContentValues();values.put("name", name);int count = db.update("person", values, "_id = ?", new String[]{id + ""});Log.i(TAG, "修改了: " + count + "行");db.close(); // 数据库关闭 }}public ListqueryAll() {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = null; // 选择条件, 给null查询所有String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null; // 分组语句 group by nameString having = null; // 过滤语句String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);int id;String name;int age;if(cursor != null && cursor.getCount() > 0) {List personList = new ArrayList ();while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.id = cursor.getInt(0);name = cursor.getString(1);age = cursor.getInt(2);personList.add(new Person(id, name, age));}db.close();return personList;}db.close();}return null;}/*** 根据id查询人* @param id* @return*/public Person queryItem(int id) {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = "_id = ?"; // 选择条件, 给null查询所有String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null; // 分组语句 group by nameString having = null; // 过滤语句String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行int _id = cursor.getInt(0);String name = cursor.getString(1);int age = cursor.getInt(2);db.close();return new Person(_id, name, age);}db.close();}return null;} }
事务的使用:
// 开启事务
db.beginTransaction();
// 标记事务成功
db.setTransactionSuccessful();
// 停止事务
db.endTransaction();