SQLite 数据库的创建及查询

SQLite 数据库的学习

 什么情况下我们才用数据库做数据存储? 
 大量数据结构相同的数据需要存储时。

创建数据库的步骤

1.创建一个类集成SqliteOpenHelper 。
需要添加一个构造方法 实现2个方法oncreate ,onupgrade
构造方法的参数介绍:
super(context, “info.db”, null,1);
// context :上下文,
// name 数据库文件的名称 ,
// factory :用来创建cursor 对象 默认为 null
//version :数据库的版本号 从1开始 发生改变将调用onupgrade 方法。
2. 创建这个 帮助类的一个 对象,调用getReadleDatabase()方法 ,会帮助我们打开创建一个数据库 ;
3. 重写 oncreate 和onupgrade 方法:
oncreate 方法是数据库第一次创建的时候会被调用,特别适合
做表结构的初始化 执行sql语句 ,SQliteDataBase db 可以用来执行sql 语句
onupgrade 方法数据库版本号发生改变时才会执行,特别适合做表结构的修改
帮助类对象的getWriteableDatabASE 和getReadableDataBase 可以帮助我们获取一个数据库操作对象sqlitedatabase :
区别:
getReadableDatabase:
先尝试以读写方式打开数据库,如果磁盘空间满了,他会重新尝试以只读方式打开数据库。
getWritableDatabase:
直接以读写方式打开数据库,如果磁盘空间满了,就直接报错。
按照上述步骤实现:
创建MySqliteHelper.java 类

public class MySqliteHelper extends SQLiteOpenHelper {

 public MySqliteHelper(Context context) {
        super(context, "info.db", null, 1);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table info(_id integer primary key autoincrement ,name varchar(20),phone varchar(11))"); //创建表 table 后边 的info 就是数据表名 ,—id是自增主键 ,包括一个name 属性值
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("alter table info add phone varchar(22)");
    }  
    }

第二步 :
在 Activity 或fragment 里

 MySqliteHelper mySqliteHelper = new MySqliteHelper(getActivity());
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getReadableDatabase();

这个时候数据库就创建完毕:数据库存放的 内存卡下
data/data/packagename/databases 文件夹下
可以使用SQLite Expert Professional查看工具进行导出数据库查看
下载地址链接:https://pan.baidu.com/s/16UJpJ3AZwo4Y6GGCSBn2Ig
提取码:p2ui

第二步 增删改查 第一种使用 sql语句
创建一个infodao.java类 来进行增删改查 的操作:
创建一个bean实体类 用于添加数据:
public class InfoDao {
MySqliteHelper mySqliteHelper;

public InfoDao(Context context) {
    mySqliteHelper = new MySqliteHelper(context);

}
  public void add(infobean bean) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();
    db.execSQL("insert into info(name,phone) values(?,?);", new Object[]{bean.name, bean.phone});
    db.close();
}

public void delete(String name) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();
    db.execSQL("delete from info where name=?;", new Object[]{name});
    db.close();
}

public void update(infobean infobean) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();
    db.execSQL("update info set phone=?where name=?;", new Object[]{infobean.phone, infobean.name
    });
    db.close();
}

public void query(String name) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();
    Cursor cursor = db.rawQuery("select  _id,name,phone from info where name=?;", new String[]{name});
    if (cursor != null && cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            int id = cursor.getInt(0);
            String name_str = cursor.getString(1);
            String phone = cursor.getString(2);
            System.out.println("_id:" + id + ";name:" + name_str + ";phone:" + phone);
        }
        cursor.close();
    }
    db.close();

}
}

Activity 里进行添加数据的方法;
   @Override
public void onClick(View v) {
    InfoDao dao = new InfoDao(getActivity());
    switch (v.getId()) {

        case R.id.addbtn:
            infobean bean = new infobean();
            bean.name = "张三";
            bean.phone = "119";

            dao.add(bean);
            infobean bean1 = new infobean();
            bean1.name = "李四";
            bean1.phone = "120";

            dao.add(bean1);

            break;

        case R.id.delbtn:
            dao.delete("张三");
            break;
        case R.id.update_btn:
            infobean bean2 = new infobean();
            bean2.name = "张三";
            bean2.phone = "11999999999999";
            dao.update(bean2);
            break;
        case R.id.query_btn:
            dao.query("张三");
            dao.query("李四");

            break;
    }
}

第二种增删改查的方法;

public class InfoDao {
MySqliteHelper mySqliteHelper;

public InfoDao(Context context) {
    mySqliteHelper = new MySqliteHelper(context);

}

public boolean add(infobean bean) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();
    //db.execSQL("insert into info(name,phone) values(?,?);", new Object[]{bean.name, bean.phone});
//table: 表名 , nullColumnHack:可以为空,标示添加一个空行, values:数据一行的值 , 返回值:代表添加这个新行的Id ,-1代表添加失败
    ContentValues values = new ContentValues();
    values.put("name", bean.name);
    values.put("phone", bean.phone);
    long result = db.insert("info", null, values);
    db.close();
    if (result != -1) {//-1代表失败
        return true;
    } else {
        return false;
    }
}

public int delete(String name) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();
    //  db.execSQL("delete from info where name=?;", new Object[]{name});
    //table :表名, whereClause: 删除条件, whereArgs:条件的占位符的参数 ; 返回值:成功删除多少行
    int result = db.delete("info", "name=?", new String[]{name});
    db.close();
    return result;
}

public int update(infobean infobean) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();//     
     db.execSQL("update info set phone=?where name=?;", new Object[]{infobean.phone, infobean.name//        });
    ContentValues values = new ContentValues();
    values.put("phone", infobean.phone);
    //table:表名, values:更新的值, whereClause:更新的条件, whereArgs:更新条件的占位符的值,返回值:成功修改多少行
    int result = db.update("info", values, "name=?", new String[]{infobean.name});
    db.close();
    return result;
}

public void query(String name) {
    SQLiteDatabase db = mySqliteHelper.getReadableDatabase();
    // Cursor cursor = db.rawQuery("select  _id,name,phone from info where name=?;", new String[]{name});
    //table:表名, columns:查询的列名,如果null代表查询所有列; selection:查询条件, selectionArgs:条件占位符的参数值,
    //groupBy:按什么字段分组, having:分组的条件, orderBy:按什么字段排序
    Cursor cursor = db.query("info", new String[]{"_id", "name", "phone"}, "name=?", new String[]{name}, null, null, "_id desc");

    if (cursor != null && cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            int id = cursor.getInt(0);
            String name_str = cursor.getString(1);
            String phone = cursor.getString(2);
            System.out.println("_id:" + id + ";name:" + name_str + ";phone:" + phone);
        }
        cursor.close();
    }
    db.close();

}

MainActivity 的修改

 @SuppressLint("WrongConstant")
    @Override
    public void onClick(View v) {
        InfoDao dao = new InfoDao(getActivity());
        switch (v.getId()) {

            case R.id.addbtn:
                infobean bean = new infobean();
                bean.name = "张三";
                bean.phone = "119";
               boolean result = dao.add(bean);
                if (result) {
                    Toast.makeText(getActivity(), "添加成功", 0).show();

                } else {
                    Toast.makeText(getActivity(), "添加失败", 0).show();
                }
                break;

            case R.id.delbtn:

                int del = dao.delete("张三");
                Toast.makeText(getActivity(), "成功删除del" + del + "行", 0).show();
                break;
            case R.id.update_btn:
                infobean bean2 = new infobean();
                bean2.name = "张三";
                bean2.phone = "11999999999999";
                int res = dao.update(bean2);
                Toast.makeText(getActivity(), "成功修改" + res + "行", 0).show();
                break;
            case R.id.query_btn:
                dao.query("张三");
                dao.query("李四");

                break;
        }
    }

你可能感兴趣的:(数据库)