现在的位置: 首页 > 综合 > 正文

ym——Android从零开始(7)(SQLite数据库)(新)

2017年02月12日 ⁄ 综合 ⁄ 共 3098字 ⁄ 字号 评论关闭

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!


前言

之前学习了多种数据存储的方式,但是要是存储数据多了,前面的方式就不太合适了,今天我们来学习手机的数据库知识。


SQLite数据库

数据库:它就是一个软件,需要安装,安装完后就有自己的目录结构。都有客户端和服务端,所有的数据库都实现了SQL标准。它是一个轻量级数据库,设计目的是嵌入式的,而且它占用的资源非常少

注意:除了主键不能存储任意的类型之外,其他的字段可以存放任意的数据类型。

图片1.png

图片2.png


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);
                }
        }
}

抱歉!评论已关闭.