转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
前言
之前学习了多种数据存储的方式,但是要是存储数据多了,前面的方式就不太合适了,今天我们来学习手机的数据库知识。
SQLite数据库
数据库:它就是一个软件,需要安装,安装完后就有自己的目录结构。都有客户端和服务端,所有的数据库都实现了SQL标准。它是一个轻量级数据库,设计目的是嵌入式的,而且它占用的资源非常少
注意:除了主键不能存储任意的类型之外,其他的字段可以存放任意的数据类型。
Cmd操作指令:
sqlite3 qjq.db 进入数据库
.tables 查看数据库里面的表
创建数据库文件:
三种方式:
第一种通过上下文创建数据库:
public class DBsqlite { private Context context; public DBsqlite(Context context) { super(); this.context = context; } public void createDB() { //通过上下文创建数据库 context.openOrCreateDatabase("persons.db", Context.MODE_PRIVATE, null); } }
第二种SQLiteDatabase创建数据库
public void createDB(){ String dir="/data/data/"+context.getPackageName(); File file=new File(dir,"persons.db"); SQLiteDatabase.openOrCreateDatabase(file, null); }
第三种创建一个help类继承SQLiteOpenHelper实现DBhelp构造onCreate方法onUpgrade方法
public class DBhelp extends SQLiteOpenHelper { public DBhelp(Context context) { // 上下文 ,数据库名,游标工厂 ,数据版本 super(context, "persons.db", null, 2); // TODO Auto-generated constructor stub } //数据库第一次创建之后调用该方法。创建表、视图。。。 或者初始化表信息 public void onCreate(SQLiteDatabase db) { // 创建数据库 db.execSQL("create table fish(_id integer primary key autoincrement,name text)"); } @Override //当数据版本被改变则会执行该方法super(context, "persons.db", null, 3); public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 版本修改表添加一列 db.execSQL("ALTER TABLE fish ADD amount integer"); }
Crud(增删改查)
以下分别用两种方式crud了,一种是面向SQL ,一种是面向对象,但是面向对象的源码里面其实也是在帮你拼接sql。
public class OtherFishService { private SQLiteOpenHelper mOpenHelper; public OtherFishService(Context context) { // TODO Auto-generated constructor stub mOpenHelper = new DBHelper(context); } /** * 插入数据 * @param name */ public void insert(String name){ SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // String sql = "insert into fish(name) values(?)"; if(db.isOpen()){ // db.execSQL(sql, new Object[]{name}); //insert into fish //ContentValues里面就是要插入的值 ContentValues values = new ContentValues(); values.put("name", name); db.insert("fish", "_id", values); db.close(); } } public List<Fish> query(){ List<Fish> fishs = new ArrayList<Fish>(); SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // String sql ="select * from fish"; if(db.isOpen()){ //cursor 就是resultset // Cursor cursor = db.rawQuery(sql, null); Cursor cursor = db.query("fish",//表名 new String[]{"*"},//要查询的列名 null,//查询条件 null,//条件参数 null,//分组 null,//条件 null);//排序 while(cursor.moveToNext()){ //得到_id的下标 int column_index = cursor.getColumnIndex("_id"); //得到_id的值 int _id = cursor.getInt(column_index); String name = cursor.getString(cursor.getColumnIndex("name")); Fish fish = new Fish(_id, name); fishs.add(fish); } //cursor使用完成之后一定要关闭 cursor.close(); db.close(); } return fishs; } public void update(Fish fish){ SQLiteDatabase db = mOpenHelper.getWritableDatabase(); if(db.isOpen()){ // String sql = "update Fish set name = ? where _id = ?"; // db.execSQL(sql,new Object[]{fish.name,fish._id}); ContentValues values = new ContentValues(); values.put("name", fish.name); String whereClause = " _id = ?"; String[] whereArgs = new String[]{fish._id+""}; db.update("fish", values, whereClause, whereArgs); } } public void delete(int _id){ SQLiteDatabase db = mOpenHelper.getWritableDatabase(); if(db.isOpen()){ // String sql = "delete from fish where _id = ?"; // db.execSQL(sql,new Object[]{_id}); String whereClause = " _id = ?"; String[] whereArgs = new String[]{_id+""}; db.delete("fish", whereClause, whereArgs); } } }