博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 数据库的增删改查的另一种方式
阅读量:6678 次
发布时间:2019-06-25

本文共 9016 字,大约阅读时间需要 30 分钟。

老师笔记

# 3 Android下另外一种增删改查方式

    
    1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象
    2.使用SqliteDatebase对象调用insert,update,delete ,query方法做增删改查。
    ******特点:增删改有了返回值,可以判断sql语句是否执行成功,但是查询不够灵活,不能做多表查询。所以在公司一般人增删改喜欢用第二种方式,查询用第一种方式。
            private MySqliteOpenHelper mySqliteOpenHelper;
    public InfoDao(Context context){
        //创建一个帮助类对象
        mySqliteOpenHelper = new MySqliteOpenHelper(context);
    }
    public boolean add(InfoBean bean){
        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase     db = mySqliteOpenHelper.getReadableDatabase();
        
        
        ContentValues values = new ContentValues();//是用map封装的对象,用来存放值
        values.put("name", bean.name);
        values.put("phone", bean.phone);
        
        //table: 表名 , nullColumnHack:可以为空,标示添加一个空行, values:数据一行的值 , 返回值:代表添加这个新行的Id ,-1代表添加失败
        long result = db.insert("info", null, values);//底层是在拼装sql语句
    
        //关闭数据库对象
        db.close();
        
        if(result != -1){//-1代表添加失败
            return true;
        }else{
            return false;
        }
    }
    public int del(String name){
        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        
        //table :表名, whereClause: 删除条件, whereArgs:条件的占位符的参数 ; 返回值:成功删除多少行
        int result = db.delete("info", "name = ?", new String[]{name});
        //关闭数据库对象
        db.close();
        
        return result;
    }
    public int update(InfoBean bean){
        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        ContentValues values = new ContentValues();//是用map封装的对象,用来存放值
        values.put("phone", bean.phone);
        //table:表名, values:更新的值, whereClause:更新的条件, whereArgs:更新条件的占位符的值,返回值:成功修改多少行
        int result = db.update("info", values, "name = ?", new String[]{bean.name});
        //关闭数据库对象
        db.close();
        return result;
    }
    public void query(String name){
    
        //执行sql语句需要sqliteDatabase对象
        //调用getReadableDatabase方法,来初始化数据库的创建
        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
        
        //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");
        //解析Cursor中的数据
        if(cursor != null && cursor.getCount() >0){//判断cursor中是否存在数据
            
            //循环遍历结果集,获取每一行的内容
            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();
    }

package com.itheima.crud;import android.app.Activity;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Toast;import com.itheima.crud2.R;import com.itheima.crud.bean.InfoBean;import com.itheima.crud.dao.InfoDao;public class MainActivity extends Activity implements OnClickListener {    private Context mContext;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mContext = this;        //创建一个帮助类对象        MySqliteOpenHelper mySqliteOpenHelper = new MySqliteOpenHelper(mContext);        //调用getReadableDatabase方法,来初始化数据库的创建        SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();        //找到相应控件        findViewById(R.id.bt_add).setOnClickListener(this);        findViewById(R.id.bt_del).setOnClickListener(this);        findViewById(R.id.bt_update).setOnClickListener(this);        findViewById(R.id.bt_query).setOnClickListener(this);    }    @Override    public void onClick(View v) {        InfoDao infoDao = new InfoDao(mContext);//创建一个dao对象做增删改查        switch (v.getId()) {        case R.id.bt_add:                        InfoBean bean = new InfoBean();            bean.name = "张三";            bean.phone ="110";            boolean result = infoDao.add(bean);            if(result){                Toast.makeText(mContext, "添加成功", 0).show();            }else{                Toast.makeText(mContext, "添加失败", 0).show();            }                                break;        case R.id.bt_del:                        int del = infoDao.del("张三");            Toast.makeText(mContext, "成功删除"+del+"行", 0).show();            break;        case R.id.bt_update:                        InfoBean bean2 = new InfoBean();            bean2.name = "张三";            bean2.phone ="119";            int update = infoDao.update(bean2);            Toast.makeText(mContext, "成功修改"+update+"行", 0).show();            break;        case R.id.bt_query:            infoDao.query("张三");            break;        default:            break;        }    }}

 

同一个包下的class  创建数据库

package com.itheima.crud;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class MySqliteOpenHelper extends SQLiteOpenHelper {    public MySqliteOpenHelper(Context context) {                //context :上下文   , name:数据库文件的名称    factory:用来创建cursor对象,默认为null         //version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能将        super(context, "info.db", null,1);    }    //oncreate方法是数据库第一次创建的时候会被调用;  特别适合做表结构的初始化,需要执行sql语句;SQLiteDatabase db可以用来执行sql语句    @Override    public void onCreate(SQLiteDatabase db) {        //通过SQLiteDatabase执行一个创建表的sql语句        db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(11))");    }    //onUpgrade数据库版本号发生改变时才会执行; 特别适合做表结构的修改    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        //添加一个phone字段//        db.execSQL("alter table info add phone varchar(11)");    }}

 

增删改查   包名的封装

package com.itheima.crud.dao;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.itheima.crud.MySqliteOpenHelper;import com.itheima.crud.bean.InfoBean;public class InfoDao {    private MySqliteOpenHelper mySqliteOpenHelper;    public InfoDao(Context context){        //创建一个帮助类对象        mySqliteOpenHelper = new MySqliteOpenHelper(context);            }    public boolean add(InfoBean bean){        //执行sql语句需要sqliteDatabase对象        //调用getReadableDatabase方法,来初始化数据库的创建        SQLiteDatabase     db = mySqliteOpenHelper.getReadableDatabase();                        ContentValues values = new ContentValues();//是用map封装的对象,用来存放值        values.put("name", bean.name);        values.put("phone", bean.phone);                //table: 表名 , nullColumnHack:可以为空,标示添加一个空行, values:数据一行的值 , 返回值:代表添加这个新行的Id ,-1代表添加失败        long result = db.insert("info", null, values);//底层是在拼装sql语句            //关闭数据库对象        db.close();                if(result != -1){
//-1代表添加失败 return true; }else{ return false; } } public int del(String name){ //执行sql语句需要sqliteDatabase对象 //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //table :表名, whereClause: 删除条件, whereArgs:条件的占位符的参数 ; 返回值:成功删除多少行 int result = db.delete("info", "name = ?", new String[]{name}); //关闭数据库对象 db.close(); return result; } public int update(InfoBean bean){ //执行sql语句需要sqliteDatabase对象 //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); ContentValues values = new ContentValues();//是用map封装的对象,用来存放值 values.put("phone", bean.phone); //table:表名, values:更新的值, whereClause:更新的条件, whereArgs:更新条件的占位符的值,返回值:成功修改多少行 int result = db.update("info", values, "name = ?", new String[]{bean.name}); //关闭数据库对象 db.close(); return result; } public void query(String name){ //执行sql语句需要sqliteDatabase对象 //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //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"); //解析Cursor中的数据 if(cursor != null && cursor.getCount() >0){
//判断cursor中是否存在数据 //循环遍历结果集,获取每一行的内容 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(); }}

 

数据的封装,也用一个包

package com.itheima.crud.bean;public class InfoBean {    public  String name;    public String phone;}

 

转载于:https://www.cnblogs.com/liangqiyuan/p/5690700.html

你可能感兴趣的文章
可不可以设计出一个完美的分布式系统?
查看>>
阿里云移动端播放器高级功能---直播时移
查看>>
前端性能优化--懒加载和预加载
查看>>
泛型之泛型方法
查看>>
bitcoin: 何为燃烧地址
查看>>
leetcode380. Insert Delete GetRandom O(1)
查看>>
re模块与正则表达式
查看>>
MySQL--MySQL索引优化
查看>>
CNCF案例研究:京东
查看>>
算法与数据结构之递归算法
查看>>
Java是怎么运行的?
查看>>
微信小程序mpvue项目使用WuxWeapp前端UI组件
查看>>
利用构建缓存机制缩短Docker镜像构建时间
查看>>
webpack 的 scope hoisting 是什么?
查看>>
2019前端面试题汇总(主要为Vue)
查看>>
js编程
查看>>
前端设计模式
查看>>
如何更优雅地切换Git分支
查看>>
ID3 算法介绍
查看>>
SpringBoot参数校验
查看>>