继上一篇Android SQLite数据库系统学习之后实践

学习Android SQLite数据库之后,实践一次,加深印象,也方便以后查看.
  1. 创建数据库
  2. 在数据库中创建第一张表 student (_id 主键,name,number,age)
  3. insert
    1. 添加几条数据到表中
  4. query
    1. 查询 表 student 中的所有数据,遍历打印,数据 和总的数据数量
    2. 按条件 name 查询 记录
    3. 按条件 name 和number 查询记录
  5. update
    1. 按名字修改 整条记录的数据
    2. 按名字修改 age
  6. delete

    1. 删除数据库
    2. 删除表中所有记录
    3. 删除表
    4. 按名字删除单条记录
    5. 按名字和number删除单条记录
  7. 创建第二张表 studenttemp (_id主键,name,number)

  8. 复制第一张表中的数据到第二张表中
  9. 在第二张表中添加字段 age
  10. 删除数据库第一张表 student
  11. 重命名数据库 第二张表 studenttemp 为 student

一、创建数据库

private static final String CREATE_TABLE_STUDENT = "create table "+TABLE_NAME
            +" (_id integer not null primary key autoincrement,"
            +"name text,"
            +"number integer )";

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_STUDENT);
    }

调用 getWritableDatabase() 或者getReadableDatabase()的时候才会真正创建

二、 删除数据库

StudentOpenHelper类中

context.deleteDatabase("school.db");

三、创建数据库

1.在数据库中创建第一张表 student (_id 主键,name,number,age)

  • 同一,创建数据库的时候 调用 getWritableDatabase() 或者getReadableDatabase()的时候会执行onCreate 方法,执行里面的 db.execSQL(CREATE_TABLE_STUDENT);
  • 手动创建一张表
  public void createTable(String tableName){
        SQLiteDatabase db = getWritableDatabase();
        String CREATE_TABLE=  "create table " + tableName
                + " (_id integer not null primary key autoincrement,"
                + "name text,"
                + "number integer,"
                + "age integer )";
        db.execSQL(CREATE_TABLE);
        db.close();
    }

四、添加记录

  1. 调用 insert 方法
public long addRecord(StudentBean studentBean){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("name",studentBean.getName());
        values.put("number",studentBean.getNumber());
        values.put("age",studentBean.getAge());
        long insert = db.insert(TABLE_NAME, null, values);
        return insert;
    }
  1. 使用execSQL执行SQL语句添加
public void addRecord2 (StudentBean studentBean){
        SQLiteDatabase db = this.getWritableDatabase();
        String INSERT_RECORD = "INSERT INTO "+TABLE_NAME+" (uuid, number, name,age,sex,gclass)"
                +" VALUES ('"
                +studentBean.getUuid()+"',"
                +studentBean.getNumber()+",'"
                +studentBean.getName()+"',"
                +studentBean.getAge()+","
                +studentBean.getSex()+",'"
                +studentBean.getGclass()+"')";
        db.execSQL(INSERT_RECORD);
        db.close();
    }

五、查询 表 student 中的所有数据,遍历打印,数据 和总的数据数量

查询相比其他操作要复杂许多
提供了四种查询方式:

1.db.rawQuery(String sql, String[] selectionArgs);  
2.db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);  
3.db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);  
4.db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); 

1.查询全部记录

public LinkedList <StudentBean> queryRecordAll(){
        LinkedList<StudentBean> studentBeenList = new LinkedList<>();
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
        while (cursor != null && cursor.moveToNext()) {
            StudentBean studentBean = new StudentBean();
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int number = cursor.getInt(cursor.getColumnIndex("number"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            studentBean.setName(name);
            studentBean.setNumber(number);
            studentBean.setAge(age);
            studentBeenList.add(studentBean);
            Log.i("jhk_2018","name = "+name+" nameid = "+cursor.getColumnIndex("name")+"  cursor "+cursor.getColumnCount());
        }
        return studentBeenList;
    }

2.单个条件查询

public LinkedList <StudentBean> queryRecordByName(String nameStr){
        LinkedList<StudentBean> studentBeenList = new LinkedList<>();
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME, new String[]{"number","age"}, "name = ?", new String[]{nameStr}, null, null, "age");

        while (cursor != null && cursor.moveToNext()) {
            StudentBean studentBean = new StudentBean();
            int number = cursor.getInt(cursor.getColumnIndex("number"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            studentBean.setNumber(number);
            studentBean.setAge(age);
            studentBeenList.add(studentBean);
        }
        return studentBeenList;
    } 

3.多个条件查询,并且按照 number 排序


    public LinkedList <StudentBean> queryRecordByNameANumber(String nameStr,int num){
        LinkedList<StudentBean> studentBeenList = new LinkedList<>();
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME, new String[]{"name","number","age"}, "name = ? and number = ? ", new String[]{nameStr,Integer.toString(num)}, null, null, "number");

        while (cursor != null && cursor.moveToNext()) {
            StudentBean studentBean = new StudentBean();
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int number = cursor.getInt(cursor.getColumnIndex("number"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            studentBean.setName(name);
            studentBean.setNumber(number);
            studentBean.setAge(age);
            studentBeenList.add(studentBean);
            Log.i("jhk_2018","queryRecordByNameANumber  number = "+number+" numberid = "+cursor.getColumnIndex("number")+"  cursor "+cursor.getColumnCount());
        }
        return studentBeenList;
    } 

六、UpDate更新

1.按名字修改 整条记录的数据


    public int upDateByName(String nameStr,StudentBean studentBean){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues valuse = new ContentValues();
        valuse.put("name",studentBean.getName());
        valuse.put("number",studentBean.getNumber());
        valuse.put("age",studentBean.getAge());

        int update = db.update(TABLE_NAME, valuse, "name = ? ", new String[]{nameStr});
        db.close();
        return update;
    }

2.按名字修改 age

public int upDateByNameAAge(String nameStr,int agei,StudentBean studentBean){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues valuse = new ContentValues();
        valuse.put("name",studentBean.getName());
        valuse.put("number",studentBean.getNumber());
        valuse.put("age",studentBean.getAge());

        int update = db.update(TABLE_NAME, valuse, "name = ? and age = ? ", new String[]{nameStr,Integer.toString(agei)});
        db.close();
        return update;
    }

七、Delete 删除

1. 删除表

public void deleteTable() {
        SQLiteDatabase db = getWritableDatabase();
        String DELETE_TABLE = "drop table "+TABLE_NAME;
        db.execSQL(DELETE_TABLE);
        db.close();
    }

2. 删除表中所有记录

  • 使用不带where子句的delete语句
 public int deleteAll() {
        SQLiteDatabase db = getWritableDatabase();

        int delete = db.delete(TABLE_NAME, null, null);
        db.close();
        return delete;
    } 
  • 使用SQL语句:delete from table_name
 public int deleteAll() {
        SQLiteDatabase db = getWritableDatabase();

        String detele_table = "delete from "+TABLE_NAME;
        db.execSQL(detele_table);
        db.close();
        return delete;
    } 
  • 按名字删除单条记录
public int deleteByName(String nameStr) {
        SQLiteDatabase db = getWritableDatabase();

        int delete = db.delete(TABLE_NAME, "name = ?  ", new String[]{nameStr});
        db.close();
        return delete;
    }
  • 按照名字和number删除记录
 public int deleteByNameANum(String nameStr,int num) {
        SQLiteDatabase db = getWritableDatabase();

        int delete = db.delete(TABLE_NAME, "name = ? and number = ? ", new String[]{nameStr,Integer.toString(num)});
        db.close();
        return delete;
    }

八、复制表

“create table “+newTableName+” as select number , name ,age from “+oldTableName +” where number = ‘222’”;
as 后面跟 要复制的字段
from 后面跟 原表
where 后面跟筛选条件

注:新的表 数据库中要不存在

public void copyTable(String oldTableName, String newTableName) {
        SQLiteDatabase db = getWritableDatabase();
        String COPY_TABLE = "create table "+newTableName+" as select number , name ,age from "+oldTableName +" where number = '222'";

        db.execSQL(COPY_TABLE);
        db.close();
    }

九、插入字段

public void insertColumn(String insertColumnTable,String insertColumn) {
        SQLiteDatabase db = getWritableDatabase();
        String COPY_TABLE = "alter table "+insertColumnTable+" add column "+insertColumn+" text ";
        db.execSQL(COPY_TABLE);
        db.close();
    }

十、重命名表

public void renameTable(String renameOldTableName,String renameNewTableName) {
        SQLiteDatabase db = getWritableDatabase();
        String COPY_TABLE = "alter table "+renameOldTableName+" rename to  "+renameNewTableName;
        db.execSQL(COPY_TABLE);
        db.close();
    }

十一、删除表里面的字段

十二、数据库升级

十三、数据库关联

十四、数据库事务

总结

其他对数据库的操作以后用到的时候再补充,如果有错误的再修改.

猜你喜欢

转载自blog.csdn.net/jinhuikang/article/details/79583024